Kam*_*Cuk 4 bash shell parameter-expansion
我很难记住哪一个参数扩展${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
Run Code Online (Sandbox Code Playgroud)
我总是将它们混合在一起,最终要么编写一些测试命令,要么查看手册。很容易记住%%删除 more then %,因为then%%是一个更长的字符串%,2 个字符 vs 1 个字符,与##vs相同#。但我总是%和#.
是否有内存规则可以知道字符串的哪一端%或#从哪一端删除?
Qua*_*odo 10
百分比符号%总是排在数字的最后(例如86%),因此它们从末尾删除。
散列符号#开始注释,因此它们从开头删除。
我使用符号的形象表示:
%:看起来像一把剪刀,当您右手拿着剪刀、左手拿着文本条时,可以剪切文本条的右侧部分。
#:看起来像橡皮擦,用于擦除文本条的左侧部分,同时用右手握住右侧部分,左手握住橡皮擦。
//:这个 bash 特定的文本替换,看起来像条带中的剪切,用于重新组装或编辑中间部分。