【发布时间】:2021-05-30 22:31:35
【问题描述】:
我无法记住参数扩展${var%subst} 或${var#subst} 中的哪一个从字符串的前面删除,哪一个从字符串的后面删除。示例:
$ var=/a/b/c
$ echo dirname=${var#/*} filename=${var%%*/}
dirname=a/b/c filename=/a/b/c # Wrong!
$ echo dirname=${var%/*} filename=${var##*/}
dirname=/a/b filename=c
我总是将它们混合在一起,最终要么编写一些测试命令,要么查看手册。很容易记住,%% 比% 删除的更多,因为%% 是比% 更长的字符串,2 个字符对1 个字符,## 对# 相同。但我总是把% 和# 混在一起。
是否有内存规则可以知道哪个% 或# 从字符串的哪一端移除?
【问题讨论】:
-
我总是尝试一个,如果失败,那么另一个:P
-
考虑一个例子的备忘单;可以是
*.txt文件,您可以从桌面快速双击,或者在命令提示符下为备忘单定义cat的别名;如果您最终得到很多备忘单,请考虑使用 shell 脚本通过case语句运行输入 arg 以确定要显示哪个备忘单
标签: bash shell parameter-expansion