"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 и его поиском? что дает хорошее представление о проблеме, с которой мы здесь имеем дело.

Другие вопросы по тегам