如何解决Bash用可变值替换字符串
我正在尝试制作一个脚本,以用变量中定义的其他权限替换AndroidManifest.xml
中的字符串,但是模式定义失败。
我发现的所有示例都使用简单的替换字符串,而没有任何特殊字符,例如这种情况。
这是我到目前为止尝试过的
#!/usr/bin/env bash
CUSTOMPERMISSION=android.permission.INTERNET,android.permission.ACCESS_NETWORK_STATE
echo $CUSTOMPERMISSION
printf "\n"
IFS=','
read -a permissionArray <<< $CUSTOMPERMISSION
printf "There are ${#permissionArray[*]} words in the text.\n\n"
ADDME=""
# Print each value of the array by using the loop
for (( n=0; n < ${#permissionArray[@]}; n++))
do
ADDME+="<uses-permission android:name=\"${permissionArray[n]}\"/>\n"
done
printf "$ADDME"
REPLACE="<!-- custom_permisions -->"
perl -pe 's/'"${REPLACE}"'/'"${ADDME}"'/' -i AndroidManifest.xml
#sed -i "s/<!-- custom_permisions -->/"${ADDME}"/g" AndroidManifest.xml
我想用新行保留ADDME
的格式,以便格式保持不变。
我试图为\
添加<
,而-
试图转义它们,因为脚本失败了
syntax error at -e line 1,near "n<"
Execution of -e aborted due to compilation errors.
我不确定哪里出问题了,我一直在搜索结果中盘旋,所以我希望有人会知道答案。
解决方法
尝试此命令
REPLACE='<\!-- custom_permisions -->'
CUSTOMPERMISSION=android.permission.INTERNET,android.permission.ACCESS_NETWORK_STATE
ADDME=$(printf '<uses-permission android:name=\\"%s\\"\\/>\\n' ${CUSTOMPERMISSION//,/ })
ADDME=${ADDME%\\n*}
sed "s|$REPLACE|$ADDME|g" AndroidManifest.xml
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。