我有以下shell脚本来构建一些东西:
#!/bin/bash -x
SRC_DIR=$1
cd $SRC_DIR
rm CMakeCache.txt
cmake \
-DCGAL_DIR=/src/path \
-DCMAKE_CXX_FLAGS=" -frounding-math -std=c++11 " \
-DTBB_INSTALL_DIR=/tbb/dir \
-DTBB_ARCH_PLATFORM=tbb_arch \
.
make VERBOSE=1
现在,选项-x将显示脚本发出的命令。对cmake
的调用如下所示:
cmake -DCGAL_DIR = / src / path'-DCMAKE_CXX_FLAGS = -frounding-math -std = c ++ 11'-DTBB_INSTALL_DIR = / tbb / dir -DTBB_ARCH_PLATFORM = tbb_arch。
处理调用时没有出现错误消息,但会在'
周围观察单引号-DCMAKE_CXX_FLAGS=...
。
他们来自哪里?它们的作用是什么?
答案 0 :(得分:1)
当bash找到包含空格的参数时,单引号会显示在跟踪输出中。
示例:
bash -cx 'echo foo "xyz 123"'
+ echo foo 'xyz 123'
foo xyz 123
bash -cx "echo foo 'xyz 123'"
+ echo foo 'xyz 123'
foo xyz 123
答案 1 :(得分:1)
这是Bash用于将包含空格的参数括在跟踪中的引号中的方法。考虑这个例子:
#!/bin/bash -x
echo Test "Test" " Test" "Test " ' Test '
输出:
+ echo Test Test ' Test' 'Test ' ' Test '
Test Test Test Test Test
这只是提供与回放内容的恼人不匹配。只要使用正确的参数执行cmake
命令,这应该不是问题。
答案 2 :(得分:1)
之间没有区别
-DCMAKE_CXX_FLAGS=" -frounding-math -std=c++11 "
和
'-DCMAKE_CXX_FLAGS= -frounding-math -std=c++11 '
他们有两种写同样的方式。 Bash不记得你是怎么写的。在内部,它将每个标记存储在一个数组中,并删除了引号。当它打印出来时,它只知道这个有空格,所以最好引用它。