【问题标题】:How to remember which expansion ${var%} ${var#} work from which end? [closed]如何记住哪个扩展 ${var%} ${var#} 从哪一端工作? [关闭]
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • “#1 规则,100% 的时间有用”——这就是我使用的短语。因此,# 从开头删除,因为它在开头,% 由于相反的原因从结尾删除。那么唯一的复杂性是贪婪/非贪婪模式。显然,想要更多(例如## 而不是#)的人是贪婪的。
【解决方案2】:

记住只有 1 和其他会相反。

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

【讨论】:

    【解决方案3】:

    对于美国英语键盘layout# 位于左侧,% 位于右侧。

    【讨论】:

    • 至少在美式键盘上。我的,% 在左边,# 在右边。
    【解决方案4】:

    我使用符号的形象表示:

    • %:看起来像一把剪刀,可以在你右手拿着剪刀,左手拿着长条的同时剪断文本条的右侧部分。

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

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

    【讨论】:

    • 谢谢! %: Looks like a pair of scissors to cut the right part of a text strip这个,对我有用,它只是“点击”,因为剪刀是如此视觉化,我曾经想象过,现在我在写脚本时总是想到剪刀。然后我记得#%的反义词,我有。
    【解决方案5】:

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

    我的记忆是,由于百分号 (%) 看起来像一个被几个圆圈 (°/o) 包围的斜线,把斜线放在旁边 即。 %/ - 而且,它看起来也像 o lol (°/o/)。

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

    【讨论】:

      猜你喜欢
      • 2021-07-24
      • 2019-02-17
      • 2012-03-12
      • 2019-08-19
      • 1970-01-01
      • 2016-05-09
      • 2014-12-01
      • 2011-04-19
      • 2023-03-13
      相关资源
      最近更新 更多