我有一个循环遍历一组文件的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")
我不明白为什么这是错的。文件存在。
答案 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