Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何解释${x%,*}和${x#*,}的含义_Linux_Bash_Escaping - Fatal编程技术网

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

Linux 如何解释${x%,*}和${x#*,}的含义,linux,bash,escaping,Linux,Bash,Escaping,问题表述: 假设我有一个名为pairs.tsv的文件,其中每行包含一对逗号分隔的文件,例如,文件路径: % cat pairs.tsv path1,path2 path3,path4 下面的代码遍历每一行,并在出现逗号的位置将其拆分,然后回显拆分的每个结果 for line in $(cat pairs.tsv); do echo ${line%,*} echo ${line#*,} % returns: path1 path2 path3 path4 我想知道这些${x%,

问题表述:

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

% cat pairs.tsv  
path1,path2  
path3,path4
下面的代码遍历每一行,并在出现
逗号的位置将其拆分,然后回显拆分的每个结果

for line in $(cat pairs.tsv); do  
echo ${line%,*}  
echo ${line#*,}
% returns:
path1
path2
path3
path4
我想知道这些
${x%,*}
${x#*,}
背后的含义;尤其是
%,*
#*,
部分。我知道他们做什么,但我不知道他们是怎么做的!这些特殊的角色叫什么

我之所以有兴趣了解这种情况是如何发生的,是为了能够在其他情况下复制相同的逻辑。因此,任何一种暗示都是非常感谢的

提前感谢!:)

  • ${x%,*}
    • 从字符串
      $x
      结尾中,删除最后一个逗号和以下任何字符
  • ${x%%,*}
    • 从字符串
      $x
      结尾中,删除第一个逗号和任何后续字符
  • ${x#*,}
    • 从字符串
      $x
      开头删除小于等于第一个逗号的字符
  • ${x###*,}
    • 从字符串
      $x
      开头删除小于等于最后一个逗号的字符
我使用以下技巧来记住差异:

  • 在我的美国键盘上,
    位于
    %
  • #
    #

一个快速的
男士聚会将回答两个问题(谢谢提示!)另外,快速注释:
用于$(cat pairs.tsv)中的行;do
太可怕了。