【整理】Linux shell中各種括號的用法


最近被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 不等於
      -ge 大於等於
      -le 小於等於
  • 表達式與[]之間要有空格
#!/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沒有定義,所以會報錯

總結

  • 引用:
    • 引用變量值 ${}
    • 引用命令運行結果 $()
  • 數學運算:$[] (()) $(())
  • 條件測試:[] [[]] (())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM