我正在为 shell 脚本编写课程做一些作业,并且有一个问题要求我编写一个脚本来测试输入的参数是否是有效的 shell 变量名称。下面的脚本似乎工作正常。
if echo "$1" | grep -v ".*[^A-Za-z_]" > /dev/null
then
echo yes
else
echo no
fi
我知道括号是 BASH shell 中测试函数的简写。我的问题是,当我尝试使用括号执行上述脚本时,出现错误。
if [ echo "$1" | grep -v ".*[^A-Za-z_]" > /dev/null ]
这个问题(我相信)是 grep 试图使用 ] 作为其参数,从而导致脚本运行时出现错误。
什么情况下不需要括号?
[
实际上是一个命令(它恰好内置于大多数 shell 中),而不仅仅是语法的一部分if
陈述。
The if
语句执行作为其参数的命令。如果该命令succeeds (sets $?
为零),则条件为真;如果它fails (sets $?
到某个非零值),条件为假。
内置的[
命令几乎完全等同于test
命令;区别在于[
需要]
作为它的最后一个参数。
也可以看看https://unix.stackexchange.com/a/22728/10454
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)