Bash f//符号?
试图弄清楚这个脚本在这一部分中到底做了什么Bash f//符号?,bash,Bash,试图弄清楚这个脚本在这一部分中到底做了什么 for f in $FILES do ORIGINAL_FILE=${f//$FILE_PATH/} 这将在稍后的diff语句中使用: DIFFER=`diff $f $REPOS_PATH/$ORIGINAL_FILE` 什么是双斜杠(//)?“f”是上面的变量还是其他变量?${…}是。参数扩展有许多变体,由变量名称后的标点符号决定${f//$FILE\u PATH/}是f的值,其中每个子字符串都匹配模式$FILE\u PATH(即模式是
for f in $FILES
do
ORIGINAL_FILE=${f//$FILE_PATH/}
这将在稍后的diff语句中使用:
DIFFER=`diff $f $REPOS_PATH/$ORIGINAL_FILE`
什么是双斜杠(//)?“f”是上面的变量还是其他变量?${…}
是。参数扩展有许多变体,由变量名称后的标点符号决定${f//$FILE\u PATH/}
是f
的值,其中每个子字符串都匹配模式$FILE\u PATH
(即模式是由空字符串替换的变量FILE\u PATH
)的值
考虑到脚本后面的内容,它写得很糟糕:显然,$FILE\u PATH
应该位于f
值的开头,替换应该是
ORIGINAL_FILE=${f#"$FILE_PATH"}
另外,该脚本缺少一些双引号,因此。${…}
是。参数扩展有许多变体,由变量名称后的标点符号决定${f//$FILE\u PATH/}
是f
的值,其中每个子字符串都匹配模式$FILE\u PATH
(即模式是由空字符串替换的变量FILE\u PATH
)的值
考虑到脚本后面的内容,它写得很糟糕:显然,$FILE\u PATH
应该位于f
值的开头,替换应该是
ORIGINAL_FILE=${f#"$FILE_PATH"}
另外,该脚本缺少一些双引号,因此。No,这将是
${f/$FILE\u PATH/}
@ddbug No,${f/$FILE\u PATH/}
将替换第一个匹配项。变量名后面有两个斜杠,所有出现的内容都被替换。脚本没有缺少双引号,因为它脆弱地依赖于$FILES
来扩展到一个以空格分隔的文件名列表。不,这将是${f/$file\u PATH/}
@ddbug否,${f/$file\u PATH/}
将替换第一个匹配项。变量名后面有两个斜杠,所有出现的内容都会被替换。脚本不会缺少双引号,因为它脆弱地依赖$FILES
来扩展到一个以空格分隔的文件名列表。