欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux shell中各种括号的用法

程序员文章站 2022-09-03 23:43:32
最近被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没有定义,所以会报错

总结

  • 引用:
    • 引用变量值 ${}
    • 引用命令运行结果 $()
  • 数学运算:$[] (()) $(())
  • 条件测试:[] [[]] (())