最近被shell里的各種括弧弄的有點暈了,又是小括弧又是中括弧,有時又有花括弧,小括弧和中括弧還有雙層寫法,用途各不一樣,我搞混了多次,對它們的用法有些迷糊了,於是我在這裡整理一下。如有錯誤,望諸君指正。 小括弧系列 [toc] () 用途:數組初始化 $() 用途:引用命令的運行結果 (()) 用 ...
最近被shell里的各種括弧弄的有點暈了,又是小括弧又是中括弧,有時又有花括弧,小括弧和中括弧還有雙層寫法,用途各不一樣,我搞混了多次,對它們的用法有些迷糊了,於是我在這裡整理一下。如有錯誤,望諸君指正。
小括弧系列
目錄
()
- 用途:數組初始化
array=(1 2 3 4 5)
$()
- 用途:引用命令的運行結果
# 先執行小括弧中的命令,然後使用將命令的運行結果賦值給a
a=$(command)
(())
- 用途1:數值比較
#!/bin/bash
a=1
b=2
if ((a>b))
then
echo "a>b"
elif ((a<b))
then
echo "a<b"
fi
# a<b
- 用途2:高級數學運算
雙小括弧命令提供了更多的數學符號,可以在雙小括弧中進行各種邏輯運算、數學運算,也支持更多的運算符(如 ++、-- 等)。
#!/bin/bash
# 實現c語言式迭代
for ((i=0;i<5;i++))
do
command
done
$(())
- 用途1:進行數學計算
a=1
b=2
echo $((a+b)) # 3
中括弧系列
[]
- 用途1:條件測試
- 字元串比較
== 等於
!= 不等於 - 整數比較:
-gt 不等於
-lt 大於
-ne 等於
-gt 不等於
- 字元串比較
- 表達式與[]之間要有空格
#!/bin/bash
if [ hello == hello ]
then
echo "yes"
else
echo "no"
fi
# yes
- 用途2:數組索引
array=(1 2 3 4 5)
echo ${array[2]}
# 3
$[]
- 效果等同於$(())
[[]]
- 用途:字元串比較的高級模式
&& || < > 可以正常存在於[[]]中
可在[[]]中使用正則表達式
#!/bin/bash
if [[ hello == hell* ]]
then
echo "yes"
else
echo "no"
fi
# yes
花括弧系列
{}
- 用途:構造序列
echo {1..5} # 1 2 3 4 5
echo {5..1} # 5 4 3 2 1
echo {1..10..2} # 1 3 5 7 9
echo {a..c} # a b c
echo {1..3}{a..c} # 1a 1b 1c 2a 2b 2c 3a 3b 3c
${}
- 引用變數值
# 數組取值
array=(1 2 3 4 5)
echo ${array[2]} # 3
a=1
echo ${a}b # 1b
echo $ab # bash會認為ab是一個整體,由於ab沒有定義,所以會報錯
總結
- 引用:
- 引用變數值 ${}
- 引用命令運行結果 $()
- 數學運算:$[] (()) $(())
- 條件測試:[] [[]] (())