shell中的${},##和%%的使用
发布日期:2021-06-30 18:53:52 浏览次数:3 分类:技术文章

本文共 1409 字,大约阅读时间需要 4 分钟。

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

file=/dir1/dir2/dir3/my.file.txt

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

${file#*/}:删掉第一个 /及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 /  及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 .  及其左边的字符串:file.txt
${file##*.}:删掉最后一个 .  及其左边的字符串:txt
${file%/*}
:删掉最后一个  /  及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 /  及其右边的字符串:(空值)
${file%.*}:删掉最后一个  .  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个  .  及其右边的字符串:/dir1/dir2/dir3/my
记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5个字节:/dir1
${file:5:5}
:提取第 5个字节右边的连续5个字节:/dir2

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

${file/dir/path}:将第一个dir替换为path/path1/dir2/dir3/my.file.txt
${file//dir/path}
:将全部dir替换为 path/path1/path2/path3/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}
:若 $file沒設定,則將 my.file.txt輸出至 STDERR (空值及非空值時不作处理)

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

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

${#file}可得到 27 ,因为/dir1/dir2/dir3/my.file.txt27个字节

转自:h

转载地址:https://linus.blog.csdn.net/article/details/50478115 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android aidl在Framework的使用
下一篇:linux input&&uevent使用

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月24日 23时22分44秒