如何解释$ {x%,*}和$ {x#*,}的含义

时间:2015-09-25 15:17:06

标签: linux bash escaping

问题制定:

让我们说我有一个名为pairs.tsv的文件,其中每行包含逗号分隔的一对,例如,文件路径:

% cat pairs.tsv  
path1,path2  
path3,path4

以下代码遍历每一行并将其拆分到comma出现的位置,然后回显拆分的每个结果。

for line in $(cat pairs.tsv); do  
echo ${line%,*}  
echo ${line#*,}
% returns:
path1
path2
path3
path4

我想知道这些${x%,*}${x#*,}背后的含义;特别是%,*#*,部分。我知道他们做了什么,但我不知道他们是怎么做的!这些特殊字符叫什么!

我有兴趣了解它是如何失效的原因是能够在其他情况下复制相同的逻辑。因此,非常感谢任何类型的提示。

提前致谢! :)

1 个答案:

答案 0 :(得分:2)

  • ${x%,*}
    • 来自字符串$x结束,删除最后逗号以及任何后续字符
  • ${x%%,*}
    • 来自字符串$x结束,删除第一个逗号以及任何后续字符
  • ${x#*,}
    • 来自字符串$x开头,删除字符,包括第一个逗号
  • ${x##*,}
    • 来自字符串$x开头,删除字符,包括最后逗号

我使用这些技巧来记住差异:

    在我的美国键盘上
  • #来自%
  • ###
  • 更贪婪