使用bash脚本wtf.sh
#!/bin/bash
echo $1
echo $2
echo $3
./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
我知道*
是Bash中的特殊参数,但这是否意味着不可能将*
作为文字字符从命令行传递出去?我期待的是
./wtf.sh * * *
*
*
*
我如何做到这一点?
答案 0 :(得分:6)
您可以通过以下方式传递文字 *
将其放在引号中:"*"
将其放在撇号中:'*'
反斜杠转义:\*
这些都是等价的(在这种情况下)。
不起作用的原因是您的脚本存在问题:当您不引用$1
(以及$2
和$3
)时,您告诉shell对其内容执行路径名扩展和单词拆分。这实际上几乎不是你想要的 - 在这种情况下显然不是你想要的。所以你的脚本应该是:
#!/bin/bash
echo "$1"
echo "$2"
echo "$3"
这里,参数必须用双引号("$1"
)括起来,它允许进行参数扩展,但禁止路径名扩展和单词拆分。
答案 1 :(得分:0)
如果您将*
作为命令行选项的值传递并使用getopt
解压缩命令行选项,则可以使用-S*
,其中-S是命令行选项, *
是它的价值。请注意,S
和*
之间没有空格。如果你给出空间,那么路径扩展会自动发生。