我正在尝试在脚本中的特定行之前插入变量。这是我正在使用的代码:
var1=$(echo "database1=")
var2=$(echo "database2=")
var3=$(echo "database3=")
sed -i "/#variables/i \
$var1\
$var2\
$var3" /data1/create_database
我希望create_database
在我运行上面的命令后会是这样:
database1=
database2=
database3=
#variables
但我得到了这个结果:
database1= database2= database3=
#variables
尝试了几种方法都没有奏效。我应该怎么办?
您不需要命令替换来设置变量:
我认为你需要单引号来添加换行符,但如果你用双引号引用你的变量,它看起来很丑。如果您的变量包含空格字符,则需要双引号:
使用 GNU sed 您可以简单地添加一些换行符:
您可以使用转义序列 (
\n
) 插入换行符。注意相当于
所以你需要一个双反斜杠
也许还可以考虑使用多个表达式以使其成为单行命令,其中每个表达式实际上都是一行。
最后你可能需要逃避你的变量
由于您在双引号下操作,因此您需要将反斜杠的数量加倍:
如果你有比计算那些该死的反斜杠更好的事情要做,你可以允许
sed
为你处理细节,但这会让你在代码方面付出代价:或者这里没有提到换行符:
当然,在 sed 代码中植入 shell 变量时必须小心。它们必须先绝育,然后再使用。例如,如果你的 shell 变量中有一个斜杠“/”怎么办?