Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
bash参数替换的困惑_Bash_Shell - Fatal编程技术网

bash参数替换的困惑

bash参数替换的困惑,bash,shell,Bash,Shell,我有一个脚本来重命名一个文件或一系列包含特定字符串的文件 for i in "${@:3}"; do mv -- "$i" "${i/$1/$2}" done 所以当我这么做的时候 bash script_name patter_1 pattern_2 string* 它确实有效,但当我尝试时: mv -- "$i" "${i//$1/$2}" 它仍然有效 ${i/$1/$2} 及 那个么为什么会发生这种情况呢?我在bash指南中搜索初学者,但仍然并没有任何线索。感

我有一个脚本来重命名一个文件或一系列包含特定字符串的文件

for i in "${@:3}"; do
        mv -- "$i" "${i/$1/$2}"
done
所以当我这么做的时候

bash script_name patter_1 pattern_2 string*
它确实有效,但当我尝试时:

mv -- "$i" "${i//$1/$2}"  
它仍然有效

${i/$1/$2} 

那个么为什么会发生这种情况呢?我在bash指南中搜索初学者,但仍然并没有任何线索。感谢您

来自:

${parameter/pattern/string}

模式被扩展以产生一个模式,就像在文件名中一样 膨胀参数展开,模式的最长匹配 将其值替换为字符串如果模式以开始 “/”,模式的所有匹配项都替换为字符串

因此,如果更换只需进行一次,则这些是等效的:

${parameter/pattern/string}
           ^
${parameter//pattern/string}
           ^^
请参见一个示例:

$ i="hello"
$ echo ${i/e/XX}  #just one replacement
hXXllo            # <----------------------
$ echo ${i//e/XX} # multiple replacements  | they are the same
hXXllo            # <----------------------
$ echo ${i/l/XX}  #just one replacement
heXXlo            # it just happens once!
$ echo ${i//l/XX} #multiple replacements
heXXXXo           # it happens many times!
$i=“你好”
$echo${i/e/XX}#只需一个替换
hXXllo#
$ i="hello"
$ echo ${i/e/XX}  #just one replacement
hXXllo            # <----------------------
$ echo ${i//e/XX} # multiple replacements  | they are the same
hXXllo            # <----------------------
$ echo ${i/l/XX}  #just one replacement
heXXlo            # it just happens once!
$ echo ${i//l/XX} #multiple replacements
heXXXXo           # it happens many times!