如何记住哪个扩展 ${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在他他举起的手(不可能看不见)。
我记不起参数扩展 ${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在他他举起的手(不可能看不见)。