如何将实际变量传递给bash中的文本文件?

时间:2018-11-28 05:04:27

标签: linux bash shell terminal

我正在创建一个脚本,该脚本需要根据时间戳生成提交消息,以在私有存储库中进行自动备份。

echo "#!/bin/bash   
     cd ${DIRECTORY}
     git add .
     git commit -m 'Backup $(date +%s)'
     git push origin master
" >> backup.sh

必须在文件中原样打印时间戳$(date +%s),而不是在生成此文件时打印时间戳。

如何将实际变量传递给bash中的文本文件?

我已经尝试过刻度线,但它不会打印任何内容。也许我尝试错了?

3 个答案:

答案 0 :(得分:3)

使用单引号而不是双引号,因为

单引号(')不会插入任何内容,但双引号(")会插值 请参阅更多here

echo '#!/bin/bash   
     cd ${DIRECTORY}
     git add .
     git commit -m "Backup $(date +%s)"
     git push origin master
' >> backup.sh

在完全不同的音符'>>'上,您真的希望它成为追加操作符吗?

答案 1 :(得分:1)

您还可以选择使用 heredoc 附加到backup.sh。 Heredoc提供了额外的控制权,允许使用<<-保留制表符缩进,并通过单引号Heredoc标记(例如'EOF')来控制变量扩展

如果您要扩展${DIRECTORY}但保留$(date +%s),则可以使用:

cat << EOF >> backup.sh
#!/bin/bash   
cd ${DIRECTORY}
git add .
git commit -m 'Backup \$(date +%s)'
git push origin master
EOF

将使用正确的目录和backup.sh而不是时间戳将内容附加到$(date +%s)

如果您希望${DIRECTORY}$(date +%s)都以书面形式输入到backup.sh中而不进行扩展,则只需在第一个'EOF'前面加上单引号,例如

cat << 'EOF' >> backup.sh
#!/bin/bash   
cd ${DIRECTORY}
git add .
git commit -m 'Backup $(date +%s)'
git push origin master
EOF

如果它可以帮助您考虑实际发生的情况,还可以编写:

cat >> backup.sh << EOF
...
EOF

(如果您想考虑“ EOF ... EOFbackup.sh之间的所有事物)

答案 2 :(得分:0)

由于$表示扩展(在这种情况下,$(..)执行date程序),因此您只需要转义该字符,就可以将其转换为文字$

为此,请在其前面加上反斜杠:\$