我有带单引号的字符串。我想在其中插入一个变量并展开它。我知道在 bash 中变量扩展仅适用于双引号。但我仍然无法让它工作。
e.g.:
TOOLS_DIR="/tools"
echo '#define SYS_VIMRC_FILE "${TOOLS_DIR}/etc/vimrc"' >> src/feature.h
我得到的结果是这样的:
#define SYS_VIMRC_FILE "${TOOLS_DIR}/etc/vimrc"
并且,预期的输出是:
#define SYS_VIMRC_FILE "/tools/etc/vimrc"
我该如何解决这个问题?
答案1
从技术上讲,您的双引号仍然在单引号内,因此无法进行扩展。您可以在开始双引号之前关闭单引号,然后在内部部分的末尾执行相反的操作以实现所需的效果:
TOOLS_DIR="/tools"
echo '#define SYS_VIMRC_FILE "'"$TOOLS_DIR"'"/etc/vimrc' >> src/feature.h
或者:
TOOLS_DIR="/tools"
printf '#define SYS_VIMRC_FILE "%s"/etc/vimrc\n' "$TOOLS_DIR" >> src/feature.h
答案2
您的变量不会扩展,因为您已使用'
heredoc分隔字符串
TOOLS_DIR="/tools"
cat <<- EOF >> src/feature.h
#define SYS_VIMRC_FILE "${TOOLS_DIR}/etc/vimrc"
EOF
或者你可以改变"
并逃避内心"
的
TOOLS_DIR="/tools"
echo "#define SYS_VIMRC_FILE \"${TOOLS_DIR}/etc/vimrc\"" >> src/feature.h