Jeśli używasz powłoki, które wykonuje prosty podstawienie a zmienna SHELL_VAR
nie istnieje (lub jest puste), to trzeba zwrócić uwagę na przypadki brzegowe. Poniższe tłumaczenia nastąpi:
if test $SHELL_VAR = yes; then --> if test = yes; then
if test x$SHELL_VAR = xyes; then --> if test x = xyes; then
Pierwszy z nich wygeneruje błąd, ponieważ argument pięść do test
zaginął. Drugi nie ma tego problemu.
Twoja sprawa tłumaczy następująco:
if test "x$SHELL_VAR" = "xyes"; then --> if test "x" = "xyes"; then
Może wydają nieco zbędny, ponieważ posiada zarówno cytaty i „x”, ale będzie również obsługiwać zmienną ze spacjami w nim, bez podania to jako dwa argumenty dla polecenia test
.
Inny powód (inny niż puste zmienne) ma związek z przetwarzaniem opcji. Jeśli piszesz:
if test "$1" = "abc" ; then ...
i $1
ma wartość -n
lub -z
lub innych ważnych opcji dowodzić test
, składnia jest niejednoznaczna.x
z przodu zapobiega przedostawaniu się wiodącej kreski jako opcji do test
.
Należy pamiętać, że zależy to od powłoki. Niektóre powłoki (według mnie, csh
) będą gorzko narzekać, jeśli zmienna środowiskowa nie istnieje, a nie tylko zwraca pusty ciąg).
Zobacz także [Celem skryptu powłoki x w '" x $ Variable "'] (http://stackoverflow.com/questions/1805663/shell-script- purpose-of-x-in-xvariable/). To pytanie jest duplikatem tego. –
Zobacz także [bash test dla pustego łańcucha z 'X" "'] (http://stackoverflow.com/questions/6852612/bash-test-for-empty-string-with-x). To pytanie jest także jego duplikatem lub obejmuje większość tego samego problemu. Oba duplikaty mają dobre odpowiedzi. –