Подстановочные знаки внутри кавычек


32

Это будет легко, но в моей памяти, когда сценарии оболочки используют двойные кавычки, можно расширить глобализацию и переменные.

Но в следующем коде:

#!/bin/sh

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

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

Я получаю этот результат:

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

То есть одинарные кавычки предотвращают глобальное расширение и расширение переменных, а двойные кавычки допускают только расширение переменных и не содержат глобализации?

Могу ли я использовать любой шаблон цитирования?

Ответы:


26

Вы правы: глобирование не работает ни в одинарных, ни в двойных кавычках. Однако вы можете интерполировать глобирование с помощью строк в двойных кавычках:

$ echo "Привет, мир" * .sh "Прощай, мир"
привет мир [список файлов] прощай мир

6
Или даже echo "$hello and $goodbye".*(смешайте переменные расширения, пробелы и глобус в одном и том же «слове».
vonbrand

1
В этом случае, похоже, не работает глобализация echo /path/to/file/*${variable}. Как сделать глобус при добавлении интерполированной электронной почты?
CMCDragonkai

2
@CMCDragonkai echo "$FOLDER_PATH"/*.extensionпрекрасно работает для меня, вопреки принятому ответу, мне пришлось удалить пробел между "и *. Надеюсь, это поможет.
LostBalloon

@CMCDragonkai, @LostBalloon Я использую следующий шаблон, когда хочу использовать глобусы с переменными, которые могут иметь пробелы:(cd "$FOLDER_PATH" && echo *.extension)
Стивен Дарнелл,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.