无法打印作为参数的 Glob 表达式

无法打印作为参数的 Glob 表达式

我正在尝试编写一个简单的 bash 脚本,它将打印作为终端输入提供的参数。

echo "${1-nothing}"

我尝试过使用 $@ 或不使用引号。如果我输入*参数,则不会打印出 *,而是打印出 bash 文件的名称。我怎样才能简单地将 * 作为参数打印出来?

答案1

我假设你的脚本是:

#!/bin/bash
echo "${1-nothing}"

以及您chmod a+x为这个脚本所做的一切。

当你输入 时./script.sh *,你输入的 shell 将解释此命令。./script.sh表示启动脚本。*这里表示当前目录中所有文件和目录的名称。所以,script.sh等等possibly_another_file。因此,执行的是:

./script.sh script.sh possibly_another_file

您可以尝试echo *查看目录中的实际列表。

但是现在,您不希望*在输入的 shell 中扩展 。最简单的解决方案是引用*,如

./script.sh '*'

shell 不会扩展引用的字符串。

您还可以告诉 shell,必须*将 解释为字符*,而不是 Glob。您可以使用\来实现这一点,例如

./script.sh \*

相关内容