Symbole wieloznaczne wewnątrz cytatów

32

Będzie to łatwe, ale w moich wspomnieniach, kiedy skryptowanie powłoki używa podwójnych cudzysłowów, pozwala na rozszerzanie globowania i zmiennych.

Ale w następującym kodzie:

#!/bin/sh

echo *.sh
echo "*.sh"
echo '*.sh'

echo $LANG
echo "$LANG"
echo '$LANG'

Otrzymuję ten wynik:

bob.sh redeployJboss.sh
*.sh
*.sh
en_US.utf8
en_US.utf8
$LANG

Więc pojedyncze cytowanie zapobiega globalnej ORAZ rozszerzaniu zmiennej, ale podwójne cytowanie pozwala tylko na zmienną ekspansję i brak globowania?

Czy mogę globować według dowolnego wzoru cytowania?

tisek
źródło

Odpowiedzi:

26

Masz rację: globowanie nie działa w przypadku pojedynczych lub podwójnych cudzysłowów. Można jednak interpolować globowanie za pomocą ciągów cudzysłowów:

$ echo „hello world” * .sh „goodbye world”
hello world [lista plików] do widzenia świat
Flup
źródło
6
Lub nawet echo "$hello and $goodbye".*(mieszaj zmienne rozszerzenia, spacje i glob w tym samym „słowie”.
vonbrand,
1
Globbing nie wydają się działać w tym przypadku echo /path/to/file/*${variable}. Jak globować, dodając interpolowany e-mail?
CMCDragonkai
2
@CMCDragonkai echo "$FOLDER_PATH"/*.extensiondziała dla mnie dobrze, w przeciwieństwie do przyjętej odpowiedzi, musiałem usunąć spacje między "i *. Mam nadzieję, że to pomoże.
LostBalloon,
@CMCDragonkai, @LostBalloon Używam następującego wzorca, gdy chcę używać globów ze zmiennymi, które mogą mieć spacje:(cd "$FOLDER_PATH" && echo *.extension)
Steven Darnell