是否可以在CASE语句中使用多个变量?如果是这样,语法是什么?我试图使用一个但似乎无法正确使用它。我希望声明是
case $ch+$sys in
*+lin|02+*) at=C2 ;;
*+rin|02+*) at=O57 ;;
*+lin|05+*) at=C1 ;;
*+rin|05+*) at=O123 ;;
esac
如果其中一个变量不满足条件,则必须显示错误消息!
答案 0 :(得分:3)
我的另一个答案在所有情况下都不起作用,我错过了最简单的答案,通过过度思考
您只需要有一个条件是两者的串联。
对于任何与上述情况不符的事情,最后放置的*)香港专业教育学院是默认情况。case $ch+$sys in
02+lin) at=C2 ;;
02+rin) at=O57 ;;
05+lin) at=C1 ;;
05+rin) at=O123 ;;
*) echo Not worked ;;
esac
答案 1 :(得分:0)
case
语句(在shell编程中很多东西)仅适用于字符串。如何构建这些字符串,可能是由几个变量构成的,完全取决于您。如果你使用类似+
的sth组合多个变量,请记住所选择的组合字符原则上可以是值的一部分。因此one+two
与three
结合使用组合字符+
将与one
结合two+three
相同。但在典型情况下,您可能会选择一个组合字符,您可以确定它不属于值。
因此,只要$ch+$sys
未出现在变量中,您将两个变量组合成一个字符串值(使用+
)的方法就完全有效。正如您所做的那样,您只需在不同情况下使用相应的匹配值即可。
根据您发布的内容,我无法推导出代码的语义(ch
和sys
之类的名称,lin
和rin
之类的值太模糊了。所以请详细说明"条件"你在最后一句中提到了。
您的代码目前在伪代码中执行的操作是这样的:
if sys = "lin" or ch = "02" then at ← C2
elif sys = "rin" or ch = "02" then at ← 057
elif sys = "lin" or ch = "05" then at ← C1
elif sys = "rin" or ch = "05" then at ← 0123
这可能是胡说八道,因为至少最后一种情况永远不会发生(第二种情况或第三种情况都会发生,从而阻止了最后一种情况)。
所以也许你想要改写你实际上想要的东西,然后我们就如何实现它提供更明确的建议。