我正在尝试学习一些bash基础知识,并在回显一些可能包含“ *”字符的字符串时遇到一些意外行为。现在,我试图了解bash何时决定glob输出。
我可以运行以下命令并在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
我正在运行几乎相同版本的bash,但是无法重现您的问题。换句话说,bash以我期望的方式表现:
$ echo $BASH_VERSION
3.2.57(1)-release
$ foo="*"; echo $foo
bar.txt foo.txt printFoo.sh
仅当我在echo命令中引用foo时,才能重现它,它给出了抑制globbing的预期结果:
$ foo="*"; echo "$foo"
*
bash在以交互方式或在脚本中使用时,在globe方面的行为没有不同。从您的行为来看,我宁愿断定您的交互式外壳是Zsh,因为这是我所知的唯一流行的外壳,它将以这种方式运行。当然,如果您编写了zsh script,则在示例中它也不会展开$foo
。