遇到了这段代码:
for entry in $(echo $tmp | tr ';' '\n')
do
echo $entry
rproj="${entry%%,*}"
rhash="${entry##*,}"
remoteproj[$rproj]=$rhash
done
因此,我确实理解最初是“;” 转换为新行,以便文件中的所有条目都位于单独的行上。但是,我是第一次看到这种情况:
rproj="${entry%%,*}"
rhash="${entry##*,}"
我确实知道这会占用','之前和之后的所有内容,逗号','之后。但是,这比拆分更有效吗?另外,如果有人请解释语法,因为我无法将其与正则表达式或bash语法联系起来。
这些是字符串操作运算符。
${string##substring}
从$ string的前面删除$ substring的最长匹配项。
表示它将删除第一个逗号之前的所有内容,包括它
${string%%substring}
从$ string的后面删除$ substring的最长匹配项。
表示它将删除最后一个逗号之后的所有内容,包括它
顺便说一句,我将使用内部字段分隔符代替tr
命令:
IFS=';'
for entry in $tmp ; do
echo $entry
rproj="${entry%%,*}"
rhash="${entry##*,}"
remoteproj[$rproj]=$rhash
done
unset IFS
像这样。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句