使用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)
我该如何做到这一点?
您可以通过以下方式传递文字*:
把它放在引号中: "*"
把它放在撇号中: '*'
反斜杠逃避它: \*
这些都是等价的(在这种情况下).
不起作用的原因是您的脚本有问题:当您不引用$1(和$2和$3)时,您告诉shell对其内容执行路径名扩展和单词拆分.这实际上几乎不是你想要的 - 在这种情况下显然不是你想要的.所以你的脚本应该是:
#!/bin/bash
echo "$1"
echo "$2"
echo "$3"
Run Code Online (Sandbox Code Playgroud)
这里,参数必须用双引号("$1")括起来,它允许进行参数扩展,但禁止路径名扩展和单词拆分.