如何解读${x%,*}和${x#*,}的含义
How to interpret the meaning of ${x%,*} and ${x#*,}
问题表述:
假设我有一个名为 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#*,}
背后的含义;特别是 %,*
和 #*,
部分。我知道他们做什么,但我不知道他们是怎么做的!还有这些特殊字符叫什么!
我之所以有兴趣了解这是怎么回事,是为了能够在其他情况下复制相同的逻辑。因此,非常感谢任何类型的提示。
提前致谢! :)
${x%,*}
- 从字符串
$x
的 end 开始,删除 last 逗号和任何后续字符
${x%%,*}
- 从字符串
$x
的 end 开始,删除 first 逗号和任何后续字符
${x#*,}
- 从字符串
$x
的 开头 开始,删除直到并包括 第一个 逗号 [=50= 的字符]
${x##*,}
- 从字符串
$x
的 开头 开始,删除直到并包括 last 逗号 [=50= 的字符]
我使用这些技巧来记住差异:
- 在我的美式键盘上,
#
在 %
之前
##
比 #
更贪婪
问题表述:
假设我有一个名为 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#*,}
背后的含义;特别是 %,*
和 #*,
部分。我知道他们做什么,但我不知道他们是怎么做的!还有这些特殊字符叫什么!
我之所以有兴趣了解这是怎么回事,是为了能够在其他情况下复制相同的逻辑。因此,非常感谢任何类型的提示。
提前致谢! :)
${x%,*}
- 从字符串
$x
的 end 开始,删除 last 逗号和任何后续字符
- 从字符串
${x%%,*}
- 从字符串
$x
的 end 开始,删除 first 逗号和任何后续字符
- 从字符串
${x#*,}
- 从字符串
$x
的 开头 开始,删除直到并包括 第一个 逗号 [=50= 的字符]
- 从字符串
${x##*,}
- 从字符串
$x
的 开头 开始,删除直到并包括 last 逗号 [=50= 的字符]
- 从字符串
我使用这些技巧来记住差异:
- 在我的美式键盘上,
#
在%
之前
##
比#
更贪婪