单引号中的变量扩展

单引号中的变量扩展

我有带单引号的字符串。我想在其中插入一个变量并展开它。我知道在 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

相关内容