Bash:不同环境中的globbing行为差异

问题描述 投票:0回答:2

我正在尝试学习一些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 glob
2个回答
0
投票

我正在运行几乎相同版本的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"
*

0
投票

bash在以交互方式或在脚本中使用时,在globe方面的行为没有不同。从您的行为来看,我宁愿断定您的交互式外壳是Zsh,因为这是我所知的唯一流行的外壳,它将以这种方式运行。当然,如果您编写了zsh script,则在示例中它也不会展开$foo

© www.soinside.com 2019 - 2024. All rights reserved.