2017-09-06 38 views
4

我有以下的shell腳本建立的東西:這個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 /路徑 '-DCMAKE_CXX_FLAGS = -frounding-數學 -std = C++ 11' -DTBB_INSTALL_DIR =/TBB/DIR -DTBB_ARCH_PLATFORM = tbb_arch 。

該呼叫被不顯示錯誤信息進行處理,但觀察單引號'周圍-DCMAKE_CXX_FLAGS=...

它們來自哪裏?他們的效果是什麼?

+1

當'bash'發現包含空格的參數時,單引號顯示在跟蹤輸出中。 – anubhava

回答

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

這是bash的方式發佈包含在跟蹤報價空白參數。考慮下面這個例子:

#!/bin/bash -x 

echo Test "Test" " Test" "Test " ' Test ' 

輸出:

+ echo Test Test ' Test' 'Test ' ' Test ' 
Test Test Test Test Test 

它只是提供對比的刺激性不匹配呼應的內容。只要你的cmake命令執行正確的參數,這應該不成問題。

1

-DCMAKE_CXX_FLAGS=" -frounding-math -std=c++11 " 

'-DCMAKE_CXX_FLAGS= -frounding-math -std=c++11 ' 

沒有什麼區別他們正在寫同一件事的兩個方面。 Bash不記得你是怎麼寫的。它在內部將每個令牌存儲在數組中,並且引號被刪除。當它打印它們只知道這個有空格,所以最好引用它。