可以在Bash中传递文字字符*作为命令行参数吗?

Pet*_*ter 4 parameters bash

使用bash脚本wtf.sh

#!/bin/bash
echo $1
echo $2
echo $3
Run Code Online (Sandbox Code Playgroud)
./wtf.sh 1 2 3 
1 
2
3

./wtf.sh * * * 



end

./wtf.sh 1 * * 
1
wtf.sh
wtf.sh 

./wtf.sh 1 "*" "*"
1
wtf.sh
wtf.sh
Run Code Online (Sandbox Code Playgroud)

我知道这*是Bash中的特殊参数,但这是否意味着不可能*将命令行中的字符作为文字字符传递?我所期待的是

./wtf.sh * * * 
* 
* 
*
Run Code Online (Sandbox Code Playgroud)

我该如何做到这一点?

ric*_*ici 7

您可以通过以下方式传递文字*:

  • 把它放在引号中: "*"

  • 把它放在撇号中: '*'

  • 反斜杠逃避它: \*

这些都是等价的(在这种情况下).

不起作用的原因是您的脚本有问题:当您不引用$1(和$2$3)时,您告诉shell对其内容执行路径名扩展和单词拆分.这实际上几乎不是你想要的 - 在这种情况下显然不是你想要的.所以你的脚本应该是:

#!/bin/bash
echo "$1"
echo "$2"
echo "$3"
Run Code Online (Sandbox Code Playgroud)

这里,参数必须用双引号("$1")括起来,它允许进行参数扩展,但禁止路径名扩展和单词拆分.