Bash(与 Zsh):不同环境中的通配符行为差异

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

我正在尝试学习一些 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

bash zsh glob
2个回答
3
投票
当交互使用或在脚本中使用时,bash 在通配符方面的行为没有什么不同。从你的行为来看,我宁愿得出结论,你的交互式 shell 是 Zsh,因为这是我所知道的唯一流行的 shell,它会以这种方式运行。当然,如果您编写了 zsh

script,它也不会在您的示例中扩展 $foo


0
投票
我正在运行几乎相同版本的 bash,但无法重现您的问题。 换句话说,bash 的行为符合我的预期:

$ echo $BASH_VERSION 3.2.57(1)-release $ foo="*"; echo $foo bar.txt foo.txt printFoo.sh

只有在 echo 命令中引用 foo 才能重现它,这给出了抑制通配的预期结果:

$ foo="*"; echo "$foo" *
    
© www.soinside.com 2019 - 2024. All rights reserved.