我正在尝试编写一个简单的 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 \*