Linux Shell 中各种括号的使用: ${ }、$( )、` `、$[ ]、$(( ))、[ ]、[[ ]]、(( ))

淺唱寂寞╮ 提交于 2020-02-27 10:51:06

1、 ${} : 引用变量,还有一些其他的功能:
​fname=/aa1/aa2/aa3/dd.ee.txt

#: 从左边开始找起。##就是从那一边找起的最后一个
${fname#*/} 去掉左边第一个 / 及其左边的字符串:aa1/aa2/aa3/dd.ee.txt
${fname##*/} 去掉左边最后一个 / 及其左边的字符串:dd.ee.txt
${fname#*.} 去掉左边第一个 . 及其左边的字符串:ee.txt
${fname##*.} 去掉左边最后一个 . 及其左边的字符串:txt

%:从右边开始找起。%%就是从那一边找起的最后一个
${fname%/*} 去掉右边第一个 / 及其右边的字符串:/aa1/aa2/aa3
${fname%%/*} 去掉右边最后一个 / 及其右边的字符串:(空值)
${fname%.*} 去掉右边第一个 . 及其右边的字符串:/aa1/aa2/aa3/dd.ee
${fname%%.*} 去掉右边最后一个 . 及其右边的字符串:/aa1/aa2/aa3/dd

使用冒号(:) 截取一段字符串,${str:start:length}
${fname:0:3} 截取index从0开始的 4 个字节:/aa1
${fname:4:4} 截取index从4开始的 4 个字节:/aa2

使用单斜杠(/)和双斜杠(//)对变量值里的字符串作替换
${fname/aa/folder} 将第一个 aa 替换为 folder:/folder1/aa2/aa3/dd.ee.txt
${fname//aa/folder} 将全部 aa 替换为 folder:/folder1/folder2/folder3/dd.ee.txt

使用井号(#)计算字符串的长度: ${#string}
echo ${#fname} :22

bash数组的使用:

定义数组: arr=(a b c d)
${arr[@]} 和 arr[]{arr[*]} 相同,都是返回整个数组,包括四个元素。 通过中括号及下表获取其中的某一个元素:{arr[0]} 得到 a (第一个元素),${arr[1]} 第二个…
使用井号(#)计算数组的长度:${#arr[@]} 或 ${#arr[*]} => 4
(使用井号计算长度时,若参数为字符串则返回字符串的长度,若参数为数组则返回数组中元素的个数。)

2、$() 与 ``的作用相同,都是用来运行命令的
例如: echo echo hello 与 echo $(echo hello) 都是打印出hello。

需要注意的一点是有的shell是不支持$()的,而``则可以在所有的unix shell中使用。

3、$[] 和 $(()) 都是用来进行整数运算的
在$[] 和 $(())中进行算数运算时,变量前加不加$符号是一样的:

a=10;b=20;

echo $((a+b))

echo $[a+b]

echo $(($a+$b))

echo $[$a+$b]

以上四个的结果都是30。

$(()) 还可以将不同进制(如二进制、八进位、十六进制)的值转为十进制: $((BS#number)),BS为进制,number为数值。

例如:echo $((16#2b)) => 43 (16进制转十进制)

4、[] 主要用于字符串比较和整数比较
字符串比较时可用 == 和 != ,而整数比较时要使用 (-eq:等于;-ne:不等于;-gt:大于;-lt :小于;-ge:大于等于;-le:小于等于;)。

5、(())及[[]] 都是 [] 的加强版,在比较整数时可直接使用操作符(&&、||、<、>)

原文链接:https://blog.csdn.net/qq_23867503/article/details/94006482

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!