我正在创建一个脚本,该脚本需要根据时间戳生成提交消息,以在私有存储库中进行自动备份。
echo "#!/bin/bash
cd ${DIRECTORY}
git add .
git commit -m 'Backup $(date +%s)'
git push origin master
" >> backup.sh
必须在文件中原样打印时间戳$(date +%s)
,而不是在生成此文件时打印时间戳。
如何将实际变量传递给bash中的文本文件?
我已经尝试过刻度线,但它不会打印任何内容。也许我尝试错了?
答案 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 ... EOF
到backup.sh
之间的所有事物)
答案 2 :(得分:0)
由于$
表示扩展(在这种情况下,$(..)
执行date
程序),因此您只需要转义该字符,就可以将其转换为文字$
为此,请在其前面加上反斜杠:\$