如何记住哪个扩展 ${var%} ${var#} 从哪一端开始工作?

How to remember which expansion ${var%} ${var#} work from which end?

我记不起参数扩展 ${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 个字符 vs 1 个字符,## vs 相同#。但我总是将 %# 混合使用。

是否有内存规则可以知道从字符串的哪一端删除哪个%#

对于美式英语 layout 的键盘,# 在左侧,% 在右侧。

百分比符号 % 总是在数字中排在最后(例如 86%),因此它们从末尾移除。

井号 # 开始注释,因此它们从开头删除。

只记住1,其他的就跟它相反

# Shebang 从一个散列开始,这意味着它将从开始到模式中删除,如果你记得这个并且你知道其他人做了什么恕我直言:)

我使用符号的比喻表示:

  • %: 看起来像一把剪刀,当你右手拿着剪刀,左手拿着文本条时,可以剪掉文本条的右边部分。

  • #: 看起来像橡皮擦,你用右手握住右边部分,左手拿着橡皮擦,用来擦除文本条的左边部分。

  • //:这个 bash 特定的文本替换,看起来像是要重新 assemble 或编辑中间部分的条带中的剪切。

我以为只有我一个人遇到这个问题。

我的记忆是因为百分号 (%) 看起来像一个被几个圆圈包围的斜线 (°/o),把斜线放在旁边 IE。 %/ - 另外,这看起来也像 o lol (°/o/).

加上星号 (°/o/*) 它也看起来像一个 拿着一个球体和一个 BZZRT他举起的手(不可能看不见)。