2013-07-04 78 views
2

假設您打開搜索由ls -Qgrep爲什麼xargs -t不顯示引號?

$ mkdir "example 1" 
$ mkdir "example 2" 
$ ls -Q | grep example | xargs -t nautilus 

然後選擇-t顯示nautilus example 1 example 2不帶引號兩個目錄。但是,文件夾已正確打開。

$ ls -Q | grep example | xargs -t echo 
echo example 1 example 2 
example 1 example 2 

而且是完全完整的,讓我顯示xargs輸入:

$ ls -Q | grep example 
"example 1" 
"example 2" 

所以引號那裏......

這到底是怎麼回事?報價去了哪裏?

+0

的報價分別爲*從未*文件名(S)的一部分。做'例子*',你會發現它。 – devnull

+2

做'ls -Q | grep example',你會看到'-Q'是否引用了w.r.t。 :-) –

+0

甜。從來不知道'ls'提供了一個引用條目的選項。 – devnull

回答

2

xargs認爲引號和反斜槓是特殊的。如果你想讓它發出引號,你需要避開這些引號。傳grep輸出sed逃脫報價爲您提供:

$ ls -Q | grep example | sed 's/"/\\"/g' | xargs echo 
"example 1" "example 2" 
+0

有趣的是,顯然 - 不是'nautilus示例1示例2「,而是'nautilus」示例1「」示例2「'被調用,因爲它工作正常(請參閱nautilus示例),而不添加轉義引號。我想知道爲什麼。 –

+0

還要注意'ls -Q | grep例子| xargs -t -d'\ n''不會改變引號。 –

+0

我認爲這是xargs輸出中的一個「bug」:'ls -Q | grep例子| tr'\ n'''| xargs -t nautilus'可以正常工作,所以並不是祕密地用一條新線作爲分隔符。但是,'ls -Q | grep例子| tr'''''| xargs -t nautilus'不起作用,因此,當主動刪除(未顯示的!)引號時,'xargs'將失敗。 –