您的位置:首页 > 运维架构 > Linux

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

2017-02-18 18:45 295 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 技巧 start