一般寫程式都有 not and or 順序去做運算
但今天我發現 shell script 運算結果跟(別的)程式結果不太一樣
查了一下發現,shell script 是由左往右
這邊就很清楚,說shell 布林運算都是左到右
In many computer languages, operators with the same precedence are left-associative. That is, in the absence of grouping structures, leftmost operations are executed first. Bash is no exception to this rule.
This is important because, in Bash, && and || have the same precedence.
So what happens in your example is that the leftmost operation (||) is carried out first:
…
bash - Precedence of the shell logical operators &&, || - Unix & Linux Stack Exchange
if 多條件 boolean 寫法
可用 && , ||
1 | if [ -e $xxxx ] || [ -e $oooo ] && [ -e $dddd ] && [ -e $eeee ] |
可用 bash [[
和 ]]
調整順序1
2
3
4
5
6if [ -e $dddd ] && [ -e $eeee ] && [[ -e $xxxx || -e $oooo ]]
then
....
else
....
fi
發現 sh 也可以用 (
)
1
2
3
4
5
6if [ -e $dddd ] && [ -e $eeee ] && ([ -e $xxxx ] || [ -e $oooo ])
then
....
else
....
fi
還可以這樣用-o
-a
1 | if [ -e $dddd ] && [ -e $eeee ] && [ -e $xxxx -o -e $oooo ] |
參考連結:
Bash if statement with multiple conditions throws an error - Stack Overflow
Multiple conditions in if statement shell script - Stack Overflow
shell - Boolean operators ( &&, -a, ||, -o ) in Bash - Stack Overflow
bash - How to represent multiple conditions in a shell if statement? - Stack Overflow
彩蛋
Vagrant介绍-从使用到放弃再到掌握完全指南 - 宋净超的博客|Cloud Native|云原生布道师
bash - How do you break an array in groups of n - Stack Overflow
比較檔案是否一致
Fastest way to tell if two files are the same in Unix/Linux? - Stack Overflow