【问题标题】:"set -f" in bash not workingbash中的“set -f”不起作用
【发布时间】:2017-06-14 12:27:49
【问题描述】:

相关:Stop shell wildcard character expansion?

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

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

【问题讨论】:

  • 引用$@,set -f只对当前shell有效。

标签: bash macos glob wildcard-expansion


【解决方案1】:

您在一个单独的 shell 中运行脚本(运行 ./script.sh 派生一个子 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?,它提供了对我们在这里处理的问题的一些很好的见解。

【讨论】:

  • 天啊!有时我只需要另一双眼睛(和/或更多睡眠)。
  • @AleksG:一直在发生;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2015-05-10
  • 1970-01-01
  • 2012-11-09
  • 2011-07-17
相关资源
最近更新 更多