0
我很努力地將sed
的引用作爲參數傳回給函數。使用sed的後端引用作爲函數參數
下面是一個例子
join() { sep="$1"; shift; echo -n "$1"; shift; printf "$sep%s" "[email protected]"; }
index_of() {
local value="${1}"
shift
local array=("${@}")
for ((i = 0; i < ${#array[@]}; i++)); do
if [ "${array[$i]}" = $value ]; then
echo $i
fi
done
}
array=('foo' 'bar' 'baz')
regex=$(join '\|' "${array[@]}")
echo 'baz' 'bar' 'foo' | sed "s/\(${regex}\)/[$(index_of "\1" ${array[@]})] \1/g"
我期待這個輸出baz [2] bar [1] foo [0]
,但它的返回baz [] bar [] foo []
因爲這傳遞'\1'
的價值,而不是從sed
比賽。
如何將實際匹配作爲參數傳遞?
由於[順序擴展的](https://www.gnu.org/software/bash /manual/bashref.html#Shell-Expansions),** sed啓動之前正在執行命令替換**。 – 2015-03-25 18:11:32