可以在bash的命令中使用条件语句吗? [复制]

Posted

技术标签:

【中文标题】可以在bash的命令中使用条件语句吗? [复制]【英文标题】:Can a conditional statement be used inside a command in bash? [duplicate] 【发布时间】:2021-04-10 19:30:10 【问题描述】:

可以将条件语句插入到例如带有 bash 的 echo 之类的打印命令中吗?

例如(不工作)

$ cat t.sh
#!/bin/bash

string1="It's a "
string2opt1="beautiful"
string2opt2="gross"
string3=" day."

read c

echo -n "$string1 $( [[ $c -eq 0 ]] &&  echo -n "$string2opt1"  ||  echo "$string2opt2"  ) $string3"

我知道分号/非单行符可以做到这一点;我只是想知道是否有更优雅或可接受的方式来做到这一点。

【问题讨论】:

结束 需要前面的换行符或分号。 请注意,$(...) 命令替换会删除所有尾随换行符,因此不需要 echo -n @glennjackman 是的,我让它在一行中使用了一堆分号——我只是想知道是否有一种方法可以让单个echo 命令来处理条件语句本身。也许我应该展示我在问题中的有效解决方案——对不起!我认为我给出的例子会更清楚地说明我对什么感到好奇。正如 jared_mamrot 的回答所示,我不知道单个回声可以处理多组引号,这与我预期的一样好。另外,感谢您提供有关命令替换如何工作的额外信息! :^) 【参考方案1】:

为了澄清,你想实现这个:

#!/bin/bash

string1="It's a"
string2opt1="beautiful"
string2opt2="gross"
string3="day."

read -r c

if [[ $c -eq 0 ]]; then
  echo "$string1" "$string2opt1" "$string3"
else
  echo "$string1" "$string2opt2" "$string3"
fi

但在单行中。这对你有用吗?

#!/bin/bash

string1="It's a"
string2opt1="beautiful"
string2opt2="gross"
string3="day."

read -r c

echo "$string1" "$([[ $c -eq 0 ]] && echo "$string2opt1" || echo "$string2opt2")" "$string3"

【讨论】:

哇。我可以发誓我在某个时候尝试过这种语法。非常感谢!

以上是关于可以在bash的命令中使用条件语句吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

您可以在 if 语句中使用 2 个或更多 OR 条件吗? [复制]

bash循环语句

使用 Bash 查找和复制文件 [重复]

bash的算术运算和条件测试语句

在 Bash 中检查 sudo(带有 if 语句的脚本)

bash shell ——if 条件判断