"set -f" bash 不起作用



相关:停止外壳通配符扩展?

我过去曾在 bash 中使用过 set -f 来防止全球扩张 - 但这似乎不再适用于我的 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 => *

我错过了什么以及如何停止扩张。

您正在单独的 shell 中运行脚本(运行./script.sh分叉子 shell(,而不是您实际设置选项set -f的 shell。尝试将其放入脚本中,以便它与选项集一起运行,

$ ./script.sh *
./script.sh
1 => *

或者,您可以在当前 shell 中获取脚本,如下所示,并应用 set 选项。

$ set -f
$ source script.sh *
/usr/bin/bash
1 => *

请参阅此跨站点参考 执行 Bash 脚本与获取脚本有什么区别? 这为我们在这里处理的问题提供了一些很好的见解。

最新更新