2017-02-28 237 views
0

林下面的命令shell腳本jq - 如何在shell腳本中轉​​義'*'(特殊字符)?使用

echo $(jq -n '"1\n2\n3" | gsub("\n"; @t " * ")') 

和預期產量

"1 * 2 * 3" 

但在shell腳本它取代「\ n」在相應的目錄下的所有文件名(即'*'在這種情況下被視爲一個特殊的參數)。

1 file1 file2 2 file1 file2 3 

當我們在終端中執行相同的操作時,它會給出預期的輸出。

任何人都可以幫助我嗎?

+1

您是否嘗試過引述替換嗎? –

+0

@ IgnacioVazquez-Abrams哦,我的天哪,我錯過了。添加後,它的工作。謝謝 –

+1

爲什麼你使用'echo'?只需運行'jq' –

回答

1

您需要引用命令替換以防止結果(1 * 2 * 3)進行路徑名擴展。

echo "$(jq -n '"1\n2\n3" | gsub("\n"; @t " * ")')" 

請記住,雖然,沒有理由捕獲命令的輸出,如果你用它做的唯一事情是把它作爲獨立參數來echo。讓命令自行運行。

$ echo "$(jq -n '"1\n2\n3" | gsub("\n"; @t " * ")')" 
"1 * 2 * 3" 
$ jq -n '"1\n2\n3" | gsub("\n"; @t " * ")' 
"1 * 2 * 3" 

(作爲獎勵,jq可能會產生,如果你不捕捉輸出彩色輸出。)