【发布时间】:2024-01-21 01:47:01
【问题描述】:
我正在尝试从我的 Bash 脚本中消除“if”语法:
N=
MD='title|1.md'
这按预期工作(打印“1”和“title_1”):
if [ $(echo "$MD" | grep '|') ]; then N="${MD#*|}"; ID=${MD%|*}'_'$N; fi
echo "$N" ; echo "$ID"
这不是(打印为空):
[[ $(echo $MD | grep '|') ]] && $(N="${MD#*|}" ; ID=${MD%|*}'_'$N)
echo "$N" ; echo "$ID"
使用bash +x 运行脚本会返回:
+ N=
++ echo 'title|1'
++ grep '|'
+ [[ -n title|1 ]]
++ N=1
++ ID=title_1
+ echo ''
+ echo ''
+ exit
谁能告诉我我做错了什么?谢谢。
【问题讨论】:
-
为什么你要消除
if? -
我非常感谢 Bash Script 让我们编写代码的方式。有时很难阅读。但它非常非常聪明。在我看来。这就是为什么我通过对命令和布尔运算符进行分组来处理条件语句。
-
但请注意,
foo && bar || baz不等同于if foo; then bar; else baz,这就是为什么替换if通常会适得其反。
标签: bash conditional-statements conditional-formatting