我正在尝试学习一些 bash 基础知识,但在回显一些可能包含“*”字符的字符串时遇到了一些意外行为。 现在,我试图了解 bash 何时决定全局输出。
我可以运行输入以下内容并在 bash 中执行它:
foo="*"; echo $foo
输出:
*
但是当我将相同的代码放入文件中时,
printFoo.sh
,然后执行:
#!/usr/bin/env bash
foo="*"; echo $foo
输出:
printFoo.sh foo.txt bar.txt
当命令在文件中运行时,环境有何不同导致这种行为差异?
我的 bash 版本是:GNU bash,版本 3.2.57
script,它也不会在您的示例中扩展 $foo
。
$ echo $BASH_VERSION
3.2.57(1)-release
$ foo="*"; echo $foo
bar.txt foo.txt printFoo.sh
只有在 echo 命令中引用 foo 才能重现它,这给出了抑制通配的预期结果:
$ foo="*"; echo "$foo"
*