我不是一名优秀的 Shell 脚本专家。有人能帮我理解并解释[ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] &&
以下代码片段中的语句吗?这个特定语句在做什么和/或被验证什么?
但是,能够理解这句话:TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep Started |cut -d"=" -f2)
。这基本上是调用JBoss的JMX命令行工具来检查服务器启动状态。
代码片段:
while [ $i -lt 180 ]; do
TRUE=$($JBOSS_TWIDDLE get jboss.system:type=Server Started |grep Started |cut -d"=" -f2)
[ ! -z ${TRUE:-} ] && [ ${TRUE:-} == 'true' ] && {
echo "The $JBOSS_NAME server is up and running."
return
}
答案1
正如@drew-khoury 和@ramruma 指出的那样,这个[ -z ...
测试是多余的。
用作TRUE
变量名称只会增加混乱。
该代码片段试图回答的实际问题是:twiddle.sh
打印了什么Started=true
?或者,用 shell 的话说:
jboss_is_started() {
($JBOSS_TWIDDLE get jboss.system:type=Server Started |
grep 'Started=true' | read)
}
如果 grep 成功,构造grep ... | read
将返回 true,同时删除输出。
if jboss_is_started; then
echo "The $JBOSS_NAME server is up and running."
return
fi
答案2
如果使用双引号,则不需要精心防范 $TRUE 为空。
[ "$TRUE" = 'true' ]
-z 测试 $TRUE 是否为空,如果未设置,则 :- 不替换任何内容。这一切都是不必要的。也许这是对过度规范的编码标准的抗议。