使用sed替换bash文件中的变量 - 输出滞后

时间:2017-01-28 04:07:43

标签: linux bash shell sed

  

我试图编写一个搜索和替换特定的bash脚本   使用sed保存在config.sh中的用户输入。这确实有效;不过它   仅部分工作,如下所示。

     

config.sh

#!/bin/bash
#
#UserName to be deleted
delUserName=""
#Source
delUserSrc=/Users/"$delUserName"
#Destination
delUserDest=/Users/John/BackUp/"$delUserName"/"$delUserName".zip
     

main.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"
     

OUTPUT1:

Enter user you wish to delete: Test
delUserName: 
delUserSrc:/Users/
delUserDest:/Users/John/BackUp/ / .zip
     

OUTPUT2:

Enter user you wish to delete: Test1
delUserName:Test
delUserSrc:/Users/Test
delUserDest:/Users/John/BackUp/Test/Test.zip
     

OUTPUT3:

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。知道为什么价值观不会在第一次运行时显示出来吗? 感谢

1 个答案:

答案 0 :(得分:1)

以下是我的想法。

sed命令替换文件中的文本。它不会修改内存中变量的值。您source config.sh时会分配这些值。

所以在你的sed行之后,你需要把这行:

source scripts/config.sh

它与您的脚本中的行相同。这也是必需的,这样您的新替换值将被加载到变量中,以便您可以显示它们。一旦新值加载到内存中,echo语句就能将变量扩展为新值。