"set -f" 在 bash 不工作
"set -f" in bash not working
相关:Stop shell wildcard character expansion?
我过去曾在 bash 中使用 set -f
来防止 glob 扩展 - 但是这似乎不再适用于我的 mac:
$ cat script.sh
#!/bin/bash
echo [=12=]
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 => *
我缺少什么以及如何停止扩展。
你是运行脚本在一个单独的shell(运行 ./script.sh
forks a sub-shell)比你实际设置的选项 set -f
打开。尝试将其放入脚本中,以便它在设置选项的情况下运行,
$ ./script.sh *
./script.sh
1 => *
或者您可以在当前 shell 中获取脚本,如下所示,并应用 set
选项。
$ set -f
$ source script.sh *
/usr/bin/bash
1 => *
请参阅此跨站点参考 What is the difference between executing a Bash script vs sourcing it?,它提供了对我们在此处理的问题的一些很好的见解。
相关:Stop shell wildcard character expansion?
我过去曾在 bash 中使用 set -f
来防止 glob 扩展 - 但是这似乎不再适用于我的 mac:
$ cat script.sh
#!/bin/bash
echo [=12=]
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 => *
我缺少什么以及如何停止扩展。
你是运行脚本在一个单独的shell(运行 ./script.sh
forks a sub-shell)比你实际设置的选项 set -f
打开。尝试将其放入脚本中,以便它在设置选项的情况下运行,
$ ./script.sh *
./script.sh
1 => *
或者您可以在当前 shell 中获取脚本,如下所示,并应用 set
选项。
$ set -f
$ source script.sh *
/usr/bin/bash
1 => *
请参阅此跨站点参考 What is the difference between executing a Bash script vs sourcing it?,它提供了对我们在此处理的问题的一些很好的见解。