В расширения параметров, ${foo/a/b}
заменяет первое вхождение a
в значение foo
с b
. Для параметра @
он заменяет первое вхождение a
в каждый позиционный аргумент с b
, а расширение, как обычно, представляет собой ряд слов, соответствующих исходным аргументам.
$ set a ab ac
$ printf '%s\n' "[email protected]"
aa
ab
ac
$ printf '%s\n' "${@/a/b}"
ba
bb
bc
arg=("${@/a/b}")
представляет собой массив, элементы которого являются модифицированными позиционными аргументами. Оператор /
, примененный к расширению массива, ведет себя так же, как и с [email protected]
; в этом случае первое вхождение c
в каждом элементе ${arg[@]}
заменяется на d
.
$ printf '%s\n' "${arg[@]/c/d}"
ba
bb
bd
Наконец, $arg
само по себе эквивалентно ${arg[0]}
.
Символ косой черты может быть синтаксисом для замены (не на 100% уверен) –
Если скрипт использует массивы, shebang должен быть '#!/Bin/bash', а не' #!/Bin/sh'. – chepner