我不知道如何在bash中使用简单的if/elif/else结构。我真不敢相信,如此琐碎的事情竟然如此不直观、如此困难。我已经花了很多时间摆弄这个了。我想做的是这样的事情:
aaa="xxx"
if [[ $aaa -eq "bbb" ]]; then
echo "bbb"
elif [[ $aaa -eq "ccc" ]]; then
echo "ccc"
else
echo "something else"
fi我试过用一个[,用两个[[,用((,用==而不是-eq,我真的不是一个Linux的家伙,对语法非常困惑,我见过各种不同的语法,如果条件词的话。它总是打印bbb,不管aaa有什么值。有谁能给我解释一下如何做到这一点吗?
发布于 2021-08-02 13:08:57
-eq仅用于数字比较,欲了解更多信息请考虑阅读:
此外,考虑引用以下变量:
-eq改为==#!/bin/bash
aaa="xxx"
if [[ "$aaa" == "bbb" ]]; then
echo "bbb"
elif [[ "$aaa" == "ccc" ]]; then
echo "ccc"
else
echo "something else"
fi一些其他的东西
发布于 2021-08-02 13:09:13
使用-eq进行数值比较,而不是用于字符串。此外,您使用的引号也不正确。使用双引号在展开变量时防止字段分裂。IOW,它们需要在变量周围,而不是在文字字符串(除非文字字符串包含空格或字符,这些字符将由shell解释,如回勾符或$等)。当case语句更合适时,不要使用if/else字符串。总体而言:
#!/bin/sh
aaa="$1"
if [ "$aaa" = bbb ]; then
echo "bbb"
elif [ "$aaa" = ccc ]; then
echo "ccc"
else
echo "something else"
fi
case $aaa in
bbb) echo bbb;;
ccc) echo ccc;;
*) echo something else;;
esac关于引号:在if [ "$aaa" = "bbb" ];或case "$aaa" in中使用引号绝对没有错,但是在if [ $aaa = "bbb" ]中省略它们几乎总是错误的--允许在case $aaa in或var=$aaa中省略引号,因为在这些情况下不会发生字段分裂,但是在这些情况下包含引号肯定是最好的做法。一般情况下,用引号周围的精彩绝伦。if [ $aaa = "bbb" ]是潜在错误的巨大来源,应该避免。
https://stackoverflow.com/questions/68622119
复制相似问题