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

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%),因此它们从末尾删除。

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

  • “第一条规则,100% 的时候有用”——这就是我使用的短语。因此,“#”从开头删除,因为它位于开头,“%”出于相反的原因从结尾删除。那么唯一复杂的是贪婪/非贪婪模式。显然,想要“更多”(例如“##”而不是“#”)的人是贪婪的。 (2认同)

Rav*_*h13 7

记住只有 1 和其他将与它相反。

# Shebang 从一个散列开始,这意味着它将从开始直到模式中删除,如果您记得这一点并且您知道恕我直言 :)


pyn*_*exj 6

对于美式英语布局的键盘,#位于左侧和%右侧。


Léa*_*ris 1

我使用符号的形象表示:

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

  • #:看起来像橡皮擦,用于擦除文本条的左侧部分,同时用右手握住右侧部分,左手握住橡皮擦。

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