#shell #variables #terminal #zsh #wildcard
#оболочка #переменные #терминал #зш #подстановочный знак #zsh
Вопрос:
ls *.txt
показывает все файлы, имя которых заканчивается на .txt
Однако, если я сделаю следующее в оболочке zsh: (в моем случае на macOS 10.15 Catalina)
a=*.txt
b='*.txt'
c="*.txt"
# trying no quotes, single quotes, double quotes
# although doesn't make any difference here
ls $a
ls $b
ls $c
ls "$a"
ls "$b"
ls "$c"
Я получаю
ls: *.txt: нет такого файла или каталога
во всех случаях. Как мне включить подстановочные знаки в переменную, а затем заставить команды типа ls
фактически обрабатывать ее как подстановочные знаки, а не буквенные символы?
Ответ №1:
Вы должны использовать ~
(тильду) между $
и именем переменной, чтобы выполнить глобализацию в zsh. Это
ls $~a
Комментарии:
1. Обратите внимание, что результатом этого является временное включение
GLOB_SUBST
расширения для этого одного параметра; вы также можете установить параметр с помощьюsetopt GLOB_SUBST
для применения ко всем последующим расширениям параметров.
Ответ №2:
Вы можете включить подстановочные знаки в zsh с помощью команды:
unsetopt nomatch
Если вы хотите сделать изменение постоянным, поместите приведенную выше команду в свой .zshrc
файл.