下面的bash
脚本无法检查变量是否以“--
”开头。
这里是test.sh:
#!/bin/bash
echo -e "Args: [$@]"
if [[ "${$@:0:2}" == "--" ]]
then
echo -e "Args starts with --: [$@]"
else
echo -e "Args does not start with --: [$@]"
fi
测试如下:
./test.sh "--hello --many --args --here --must --starts --with"
./test.sh "world"
输出如下:
root@test:~# ./test.sh "--hello"
Args: [--hello --many --args --here --must --starts --with]
./test.sh: line 5: ${$@:0:2}: bad substitution
root@test:~# ./test.sh "world"
Args: [world]
./test.sh: line 5: ${$@:0:2}: bad substitution
root@test:~#
上面的脚本中有什么问题以及如何修复?
1条答案
按热度按时间iklwldmw1#
${$@}
无效(与${$x}
相同),应为${@}
;但是我认为从这个特殊的(数组?)变量中取一个子字符串是没有意义的。相反,您可以使用循环和case语句来检查模式的位置参数。这甚至适用于
sh
,而不仅仅是bash
。输出:
NB带引号的参数算作单个参数。如果需要多个单独的参数,则不能将它们带引号。