我正在使用 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
但我想说这真是一个黑客......