无法使用sed替换字符串

时间:2018-04-02 12:18:09

标签: bash shell sed

我有一个循环遍历一组文件的bash脚本,并用每个文件中的字符串替换版本号。

#!/bin/bash

ANGULAR_APP_VERSION=6.6.6
echo $ANGULAR_APP_VERSION

declare -a arr=(
"test1.txt" 
"test2.txt"
)

for i in "${arr[@]}"
do
  sed 's/"@@BUILD_VERSION@@"/"'$ANGULAR_APP_VERSION'"/g' ${arr[$i]}
done

每次运行脚本时,都会产生以下错误:

./test1.txt: syntax error: operand expected (error token is "./test1.txt")

我不明白为什么这是错的。文件存在。

1 个答案:

答案 0 :(得分:3)

#!/bin/bash

ANGULAR_APP_VERSION="6.6.6"
echo "$ANGULAR_APP_VERSION"

arr=(
    "test1.txt" 
    "test2.txt"
)

for i in "${arr[@]}"; do
     sed -i "s/@@BUILD_VERSION@@/$ANGULAR_APP_VERSION/g" "$i"
done

$i是迭代中一次一个数组的每个值)

或使用数组key

for i in "${!arr[@]}"; do
     sed -i "s/@@BUILD_VERSION@@/$ANGULAR_APP_VERSION/g" "${arr[i]}"
done

了解如何在shell中正确引用,这非常重要:

  

"双引号"每个包含空格/元字符和每个扩展的文字:"$var""$(command "$var")""${array[@]}""a & b"。使用'single quotes'代码或文字$'s: 'Costs $5 US'ssh host 'echo "$HOSTNAME"'。看到   http://mywiki.wooledge.org/Quotes
  http://mywiki.wooledge.org/Arguments
  http://wiki.bash-hackers.org/syntax/words