在Bash脚本中将${projSRC}输出到文件
我正在编写一个Bash脚本,为项目创建一个CMakeLists.txt文件。在Bash脚本中将${projSRC}输出到文件,bash,shell,file,Bash,Shell,File,我正在编写一个Bash脚本,为项目创建一个CMakeLists.txt文件。 问题出现在这一部分: echo "file(GLOB projSRC src/*.cpp)" >> CMakeLists.txt 之后,我需要程序将${SOURCES}输出到CMakeLists.txt 我不是说脚本中名为SOURCES的变量,我是说它实际上应该编写纯文本${SOURCES} 我的意思是,最终文件应该是这样的: arbitrary_command(target PROJECT so
问题出现在这一部分:
echo "file(GLOB projSRC src/*.cpp)" >> CMakeLists.txt
之后,我需要程序将${SOURCES}
输出到CMakeLists.txt我不是说脚本中名为SOURCES的变量,我是说它实际上应该编写纯文本
${SOURCES}
我的意思是,最终文件应该是这样的:
arbitrary_command(target PROJECT sources ${SOURCES})
而不是像:
arbitrary_command(target PROJECT sources [insert however bash messes it up here])
如何在Bash脚本中执行此操作?可能是我不理解您的问题 但是 将打印
${SOURCES}
给你。可能是我不明白你的问题 但是 将打印
${SOURCES}
适合您。对文字字符串使用单引号,而不是双引号:
echo 'file(GLOB ${projSRC} src/*.cpp)' >> CMakeLists.txt
这样说,在这种情况下,您可以考虑使用一个遗传算法(甚至是一个引用的遗传算法),将整个文件写入一个命令:
cat >CMakeLists.txt <<'EOF'
everything here will be emitted to the file exactly as written
${projSRC}, etc
even over multiple lines
EOF
您还可以使用多个命令将输出写入单个重定向,以避免支付多次打开输出文件的费用:
foo=this
{
echo "Here's a line, which is expanded due to double quotes: ${foo}"
echo 'Here is another line, with no expansion due to single quotes: ${foo}'
} >CMakeLists.txt
对文字字符串使用单引号,而不是双引号:
echo 'file(GLOB ${projSRC} src/*.cpp)' >> CMakeLists.txt
这样说,在这种情况下,您可以考虑使用一个遗传算法(甚至是一个引用的遗传算法),将整个文件写入一个命令:
cat >CMakeLists.txt <<'EOF'
everything here will be emitted to the file exactly as written
${projSRC}, etc
even over multiple lines
EOF
您还可以使用多个命令将输出写入单个重定向,以避免支付多次打开输出文件的费用:
foo=this
{
echo "Here's a line, which is expanded due to double quotes: ${foo}"
echo 'Here is another line, with no expansion due to single quotes: ${foo}'
} >CMakeLists.txt
就这么简单!?bare命令适用于这种特定情况,但良好的做法仍然是使用引号——如果没有引号,则会得到全局扩展(除非为引号),字符串拆分会将空格更改为不同的类型(即将制表符更改为空格,或将多个空格更改为一个空格,或删除前导空格或尾随空格),等等…这对于像makefile这样的文件格式尤其重要,因为空白类型很重要。我部分同意。。。使用单引号的解决方案同样有效,在某些情况下可能更好。对我来说,我一开始考虑的是转义\的解决方案,因为有时我需要在同一行有一些变量和一些$not_a_变量文本。就这么简单!?bare命令适用于这种特定情况,但良好的做法仍然是使用引号——如果没有引号,则会得到全局扩展(除非为引号),字符串拆分会将空格更改为不同的类型(即将制表符更改为空格,或将多个空格更改为一个空格,或删除前导空格或尾随空格),等等…这对于像makefile这样的文件格式尤其重要,因为空白类型很重要。我部分同意。。。使用单引号的解决方案同样有效,在某些情况下可能更好。对我来说,我一开始考虑的是转义\的解决方案,因为有时我需要在同一行中包含一些变量和一些$not_a_variable text。顺便说一句,反复使用
>outputFile
并不是一种好的形式——每次你把它放在命令上时,shell都会在运行那一行之前打开输出文件进行追加,然后再次关闭输出文件。为整个块重定向stdout要有效得多:{echo“hello”;echo“world”}>outputFile
顺便说一句,反复使用>outputFile
并不是一种好的形式——每次你把它放在一个命令上,shell在运行那一行之前打开输出文件进行追加,然后再次关闭输出文件。为整个块重定向stdout要高效得多:{echo“hello”;echo“world”}>outputFile