双方括号中变量的展开

双方括号中变量的展开

我正在使用 bash 5.0.7,并希望我可以扩展双方括号中的变量And="&&"和:Or="||"

$ [[ 1 > 0 $And 1 < 0 ]] 
bash: syntax error in conditional expression
bash: syntax error near `$And`
$ [[ 1 > 0 ${And} 1 < 0 ]] 
bash: syntax error in conditional expression
bash: syntax error near `${And}`

我希望有一种方法可以做到这一点,因为这将在很大程度上简化我的代码。而且,任何解释都将受到高度赞赏:我真的很好奇sh/如何bash工作!预先非常感谢您。

答案1

它与test内置[的 and -a(for &&) 和-o(for ||) 一起使用:

$ and_or=-a
$ [ 1 -gt 0 $and_or 1 -lt 0 ] && echo yes || echo nope
nope
$ test 1 -gt 0 $and_or 1 -lt 0 && echo yes || echo nope
nope
$ and_or=-o
$ [ 1 -gt 0 $and_or 1 -lt 0 ] && echo yes || echo nope
yes
$ test 1 -gt 0 $and_or 1 -lt 0 && echo yes || echo nope
yes

(使用 bash 3.2.57 / 4.4.12 / 5.0.3 测试)

正如评论中指出的,我用算术版本>和替换了字典比较运算符和。<-gt-lt

但我想说这真是一个黑客......

相关内容