#! /bin/sh
arg=("${@/a/b}")
arg=("${arg[@]/c/d}")
echo $arg
echo ${arg[@]}
当我使用不同的参数运行上面的脚本时,我得到以下结果:
$ ./a.sh a
b
b
$ ./a.sh a w
b
b w
该脚本取代了' a'在与' b'的争论中。
但是,我对使用' /'感到困惑,而且我不理解arg [@]的表达。
答案 0 :(得分:3)
在参数展开中,${foo/a/b}
会将a
的{{1}}中的第一个foo
替换为b
。对于参数@
,它将每个位置参数中的a
的第一个替换为b
,并且扩展通常是一系列的与原始论点相对应的单词。
$ set a ab ac
$ printf '%s\n' "$@"
aa
ab
ac
$ printf '%s\n' "${@/a/b}"
ba
bb
bc
arg=("${@/a/b}")
是一个数组,其元素是修改后的位置参数。应用于数组扩展的/
运算符的行为方式与$@
相同;在这种情况下,c
的每个元素中第一次出现的${arg[@]}
被替换为d
。
$ printf '%s\n' "${arg[@]/c/d}"
ba
bb
bd
最后,$arg
本身相当于${arg[0]}
。
答案 1 :(得分:1)
${arg[@]/c/d}
扩展数组arg[]
的所有元素,并将所有出现的c替换为d。
在bash shell中试试这个:
a=(this is some stuff)
echo ${a[0]}
echo ${a[1]}
echo ${a[@]}
echo "${a[@]/i/X/}"
看看会发生什么
SUBSTRING REPLACEMENT :
${string/substring/replacement} - replace first match of substring
${string//substring/replacement} - replace all matches of substring
${string/#substring/replacement} - replace substring at front of string
${string/%substring/replacement} - replace substring at tail of string