【发布时间】:2017-01-28 04:07:42
【问题描述】:
我正在尝试编写一个 bash 脚本来搜索和替换特定的 使用 sed 保存在 config.sh 中的用户输入。这确实有效;然而它 如下所示,仅部分起作用。
config.sh
#!/bin/bash # #UserName to be deleted delUserName="" #Source delUserSrc=/Users/"$delUserName" #Destination delUserDest=/Users/John/BackUp/"$delUserName"/"$delUserName".zipmain.sh
#!/bin/bash # source scripts/config.sh echo -e "\nEnter user you wish to delete: \c" read -r UserName sed -i '' -e "s/delUserName=.*/delUserName=$UserName/g" scripts/config.sh echo -e "delUserName: $delUserName" echo -e "delUserSrc: $delUserSrc" echo -e "delUserDest: $delUserDest"输出1:
Enter user you wish to delete: Test delUserName: delUserSrc:/Users/ delUserDest:/Users/John/BackUp/ / .zip输出2:
Enter user you wish to delete: Test1 delUserName:Test delUserSrc:/Users/Test delUserDest:/Users/John/BackUp/Test/Test.zip输出3:
Enter user you wish to delete: Test1 delUserName:Test1 delUserSrc:/Users/Test1 delUserDest:/Users/John/BackUp/Test1/Test1.zip预期输出1:
Enter user you wish to delete: Test delUserName:Test delUserSrc:/Users/Test delUserDest:/Users/John/BackUp/Test/Test.zip预期输出2:
Enter user you wish to delete: Test1 delUserName:Test1 delUserSrc:/Users/Test1 delUserDest:/Users/John/BackUp/Test1/Test1.zip
脚本滞后。 sed 立即更改了 $delUserName 的值,但 $delUserName、$delUserSrc 和 $delUserDest 的正确值仅在第二次运行时回显。当所有变量都在 main.sh 中时,脚本运行良好,除非我必须这样做。将用户输入保存到 $UserName。知道为什么第一次运行时值不显示吗? 谢谢
【问题讨论】:
-
锚定您的搜索
sed -i "s/^delUserName=.*/delUserName=$UserName/g" scripts/config.sh,注意:'^'。您只关心更改分配,替换将自动进行。 -
@DavidC.Rankin 没用。
-
sed -i "s/^delUserName=.*$/delUserName=\"\$UserName\"/" config.sh我忽略了删除'g'并转义'$'。