本文共 2073 字,大约阅读时间需要 6 分钟。
Bash Shell中的变量扩展功能强大,主要包括以下三种扩展形式:
基本形式:
${变量名称}
扩展形式:
${filename}
示例:
a=yangb=${a-'hello'}echo $b # 输出:yang
说明:
基本形式:
$(命令)
扩展形式:
$((算术式))
示例:
echo $(ls /) # 列出的目录内容n=5; echo $n # 输出:5
说明:
基本形式:
$((算术式))
复杂实现:
a=3+4; echo $((a)) # 输出:7
说明:
基本形式:
${变量:起始位置}${变量:起始位置:长度}
示例:
a="hello,world"b=${a:3} # 输出:lo,worldc=${a:3:5} # 输出:lo,wo
说明:
基本形式:
${变量@n}${变量:m:n}
示例:
echo ${0:2} # 输出:nt./script.sh 12 23 34 45 # 输出:23 34 45
说明:
${@:2}
取出命令参数的第二个及以后的所有参数。${@:2:4}
取出第二个及后四个参数。基本形式:
${变量名称}
示例:
a="root:x:0:0:root:/root:/bin/bash"echo ${#a} # 输出:22
说明:
${#变量}
计算字符串的长度。基本形式:
${变量/旧值/新值}${变量/旧值//新值}
示例:
a="root:x:0:0:root:/root:/bin/bash"b=${a/:/} # 替换所有 `:` 为空格b=${a/%s/} # 删除最后一个字符 `s`
说明:
/
进行替换,%
进行删除。基本形式:
${变量#样式}${变量##样式}${变量%样式}${变量%%样式}
示例:
a="/usr/sbin/ntpdate"b=${a#/*/} # 删除最短匹配的路径部分,最终为 `sbin/ntpdate`c=${a##/*/} # 删除最长匹配的路径部分,最终为 `usr/sbin`
说明:
#
为从左到右,%
为从右到左查找匹配项。基本功能:
示例:
echo "$PWD" # 输出当前工作目录echo "\$PWD" # 输出 `$PWD`echo '`date`' # 执行 date 命令并输出结果
说明:
基本形式:
${变量:默认值}
示例:
a=yangb=${a:-'hello'} # 当 a 存在且为空时,b 取默认值 `hello`c=${a:='hello'} # 当 a 存在且为空时,c 取默认值 `hello` 并警告 a 为空值
说明:
:-
和 :
区别在于,:
会将 a 设为空值,默认值成员。基本形式:
${变量:+真值}
示例:
a=123b=${a:+'true'} # 当 a 存在且不为空,b 为 `true`;否则空
说明:
+
开头的变量引用强制检验变量存在性。基本形式:
${!元素[@]}${!元素[*]}
示例:
a=(one two three)for i in ${!a[@]} do echo $idone
说明:
${!a[@]}
和 ${!a[*]}
用于遍历数组元素。基本形式:
echo ${!数组变量[@]}
示例:
a=(one two three)for i in ${!a[@]} do echo "第$i个元素:$a[$i]"done
说明:
${!a[@]}
提取数组变量的索引列表。在编写脚本时,需注意以下几点:
通过合理运用这些功能,可以大幅提升Shell脚本的可读性和功能性。
转载地址:http://wiwfk.baihongyu.com/