1

相关:停止 shell 通配符扩展?

我过去曾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 => *

我缺少什么以及如何停止扩展。

4

1 回答 1

1

您在一个单独的 shell(运行./script.shforks 一个子 shell)中运行脚本,而不是您实际设置选项的那个set -f。尝试将它放在脚本中,以便它使用选项集运行,

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

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

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

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

于 2017-06-14T12:30:21.263 回答