linux shell的一些技巧 使用{X..Y}以及${!XXX}

1、{start..end..step}

跟$(seq start end)功能一樣,生成從start至end的序列,閉合區間。

step默認爲1。

for i in {1..5}; do echo $i; done

>>> 1 2 3 4 5

可以在前面增加前綴,很方便的,如果使用$(seq ...)的話,達不到這種效果

for i in 6{1..5}; do echo $i; done

>>> 61 62 63 64 65

for i in 6$(seq 1 5); do echo $i; done

>>> 61 2 3 4 5   # 只跟第一個元素結合了~~

2、${!arr[@]}

用於返回數組array的所有下標

arr=(h0 h1 h2 h3)

for i in ${!arr[@]}; do echo $i; done

>>> 0 1 2 3

arr[10]=h10

for i in ${!arr[@]}; do echo $i; done

>>> 0 1 2 3 10

初始化數組arr時,數組下標是從0開始遞增的,所以這裏直接對arr[10]進行賦值,以空缺中間的下標,打印其下標如上。

3、${!var@}

用於返回當前shell中,變量名以var開始的變量;這種格式跟第2種很相似,可是功能卻完全不同。

var1=hello1

var2=hello2

echo ${!var@}

>>> var1 var2

var=hello

echo ${!var@}

>>> var var1 var2

變量的輸出,不是以定義的先後爲順序的,這一點需要注意。

4、${!var}

用於返回以var變量的值命名的變量的值,這話很難理解,其實有些類似C裏面的指針,看代碼就明白了。

tmp_path=/tmp

path=tmp_path

echo ${!path}

>>> /tmp

shell先將path解析出來,得到tmp_path,再取tmp_path的值,所以得到結果/tmp。

使用eval的方法稍顯麻煩:

eval echo \$$path

>>> /tmp


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章