Jesteś prawidłowo przechodzącą pusty ciąg argument do skryptu.
Jest to skrypt, który jest brudząc go:
#!/bin/bash
/home/myapp $1 $2
Skrypt nie chroni ekspansję $1
i $2
z word-rozszczepienia. Oznacza to, że jeśli $1
i $2
zawierają wiele słów, zmieniają się w pojedyncze argumenty, a jeśli którekolwiek z nich rozszerza się do zera, po prostu znikają.
Powinno być:
#!/bin/bash
/home/myapp "$1" "$2"
Ogólnie można zrobić skrypt przekazać wszystkie swoje argumenty do wywoływanego programu, podobnie jak to:
/home/myapp "[email protected]"
Te cytaty to tylko skorupa składni; nie są częścią samych danych argumentów. Po wpisaniu w powłoce program ""
, na poziomie systemu operacyjnego program otrzymuje pusty ciąg znaków języka C: wskaźnik do bajtu o wartości null. Brak ofert.
Możesz przekazać argument ""
(dwuliterowy ciąg złożony z dwóch podwójnych cudzysłowów), ale to nie jest pusty argument. Jednym ze sposobów na to jest na przykład '""'
: zawijanie go w pojedyncze cudzysłowy.
Jedynym powodem takiego działania jest manipulowanie składnią powłoki na poziomie meta: przekazywanie fragmentów kodu powłoki kodu źródłowego, takich jak cytowane żetony, puste lub inne. Powłoka ma polecenie o nazwie eval
, które przyjmuje kod źródłowy jako argument (lub wiele argumentów) i ocenia je.
przed wywołaniem eval
, linia poleceń podlega rozszerzeniu. Ta ekspansja usuwa składnię $empty_shell_string_sytnax
i zastępuje ją zawartością, znakami ""
. Tak więc eval dostaje ciąg empty_var=""
. Ocenia to i tak empty_var
jest ustawiony na pusty łańcuch, jak wskazuje składnia.
Doskonały, dokładnie to, czego potrzebowałem Dzięki! – Josh
Ustawienie 'arg2 = '" "'' będzie wyglądało dobrze, gdy będziesz echo, ale jeśli spróbujesz użyć go do przekazania pustego ciągu do czegoś innego (jak w '/ home/myapp $ 1 $ arg2'), wygrywa ' t działa - przejdzie ciąg znaków składający się z dwóch podwójnych cudzysłowów, a nie z pustego ciągu znaków. –
@GordonDavisson * Chcę, aby zachował ten pusty ciąg i zamiast tego wykonaj: '/ home/myapp arg1" "* * Czy nie jest to dokładnie to, o co prosi OP? –