shell脚本中${}的用法

来源:互联网 发布:旅游拼车 知乎 编辑:程序博客网 时间:2024/06/05 05:15

${ } 用于字符串时常常用做变量的替换


今天看一个脚本例子的时候有些地方不太懂,所以上网查了下,觉得很不错,保留下来,供大家参考!

假设我们定义了一个变量为:

file=/home/henry/myshells/myfile.test.txt

可以用${ }分别替换得到不同的值:

${file#*/}:删掉第一个/及其左边的字符串
home/henry/myshells/myfile.test.txt

${file##*/}:删掉最后一个 /  及其左边的字符串:
myfile.test.txt

${file#*.}:删掉第一个及其左边的字符串:
test.txt

${file##*.}:删掉最后一个及其左边的字符串:
txt

${file%/*}:删掉最后一个  /  及其右边的字符串
home/henry/myshells

${file%%/*}:删掉第一个 /  及其右边的字符串:(空值)


${file%.*}:删掉最后一个  及其右边的字符串(可以看作是从右边数第一个.开始)
/home/henry/myshells/myfile.test

${file%%.*}:删掉第一个   及其右边的字符串(可以看作是从右边数最后一个.开始)

home/henry/myshells/myfile

归纳如下:
# 是 去掉左边(键盘上#在 $ 的左边)    
%是去掉右边(键盘上% 在$ 的右边)

单一符号是最小匹配;两个符号是最大匹配

${file:0:5}:提取最左边的 5 个字节:
/home

${file:5:5}:提取第 5 个字节右边的连续5个字节:      //从0开始计数

/henr

也可以对变量值里的字符串作替换:


${file/myshells/myworks}:将第一个myshells替换为mywoks
/home/henry/myworks/myfile.test.txt

${file//my/your}:将全部my替换为 your
/home/henry/yourshells/yourfile.test.txt

利用 ${ } 还可针对不同的变数状态赋值(沒设定、空值、非空值):

${file-my.file.txt} :假如$file沒有设定則使用 my.file.txt 作传回值。(空值及非空值時不作处理


${file:-my.file.txt} :假如$file沒有設定为空值,則使用 my.file.txt 作傳回值。 (非空值時不作处理)


${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作处理)


${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt作傳回值。 (沒設定及空值時不作处理)


${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt。 (空值及非空值時不作处理)


${file:=my.file.txt} :若 $file 沒設定為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為my.file.txt 。 (非空值時不作处理)


${file?my.file.txt} :若 $file 沒設定,則將my.file.txt 輸出至 STDERR。 (空值及非空值時不作处理)


${file:?my.file.txt} :若 $file 没设定为空值,则将 my.file.txt 输出至 STDERR。 (非空值時不作处理)


${#var} 可计算出变量值的长度:

${#file} 可得到 36 ,因为/home/henry/myshells/myfile.test.txt共计36个字节


1 0
原创粉丝点击