我有一个 bash 脚本,旨在输出另一个 bash 脚本。我正在使用cat
. 我想评估输出脚本中的一些表达式,而不是其他表达式。
PROJECT=myproject
cat << EOF > create_dir.sh
#!/usr/bin/env bash
DATE=`date '+%y%m%d-%H%M'`
mkdir $PROJECT/\$DATE
EOF
生成的create_dir.sh
文件如下所示:
#!/usr/bin/env bash
DATE=171123-1834
mkdir myproject/$DATE
我想要的结果是这样的:
#!/usr/bin/env bash
DATE=`date '+%y%m%d-%H%M'`
mkdir myproject/$DATE
如何修改此脚本以便DATE=
不评估以下表达式,同时确保$PROJECT
对其进行评估?
您需要转义 '`' 符号,因为它们的意思是“执行此代码”。因此该行应如下所示:
cat << \EOF
如果引用了标签,则此处的文档按原样使用。或者引用此处文档中的反引号。
手册页的相关部分是:
请注意,此解决方案将逐字复制此处的文档;要完成一些扩展而另一些未完成,唯一的解决方案是使用
\
引用那些未扩展的结构。