gpt4 book ai didi

linux - if 结构什么时候不需要括号?

转载 作者:太空狗 更新时间:2023-10-29 11:29:18 25 4
gpt4 key购买 nike

我正在为一个 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 语句的语法的一部分。

if 语句执行作为其参数的命令。如果该命令成功(将$? 设置为零),则条件为真;如果它失败(将$? 设置为某个非零值),则条件为假。

内置的[命令几乎完全等同于test命令;不同之处在于 [ 需要 ] 作为它的最后一个参数。

另见 https://unix.stackexchange.com/a/22728/10454

关于linux - if 结构什么时候不需要括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26725431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com