"set -f" в bash не работает
Связанный: Остановить расширение подстановочного знака в оболочке?
Я раньше использовал set -f
в bash для предотвращения расширения глобуса - однако, похоже, это больше не работает на моем Mac:
$ cat script.sh
#!/bin/bash
echo $0
i=1
for var in $@
do
echo "$i => $var"
((i++))
done
$ set -f
$ ./script.sh *
./script.sh
1 => program
2 => program.cpp
3 => script.sh
С set -f
Я ожидал, что результат будет
$ ./script.sh *
./script.sh
1 => *
Что мне не хватает и как мне остановить расширение.
1 ответ
Вы запускаете скрипт в отдельной оболочке ./script.sh
разветвляется суб-оболочка), чем тот, который вы на самом деле установили опцию set -f
на. Попробуйте поместить его в скрипт, чтобы он работал с установленным параметром,
$ ./script.sh *
./script.sh
1 => *
Или вы можете использовать скрипт в текущей оболочке, как показано ниже set
опция применена.
$ set -f
$ source script.sh *
/usr/bin/bash
1 => *
Посмотрите эту межсайтовую ссылку. В чем разница между выполнением сценария Bash и его поиском? что дает хорошее представление о проблеме, с которой мы здесь имеем дело.