Xargs
為什麼 xargs 會從輸入中去除引號?
為什麼 xargs 會從輸入文本中去除引號?
這是一個簡化的範例:
echo "/Place/='http://www.google.com'" | xargs echo
輸出
/Place/=http://www.google.com
有沒有辦法解決這個問題?(xargs -0 對我沒有幫助)
如果你想
xargs
忽略引號,一個好的靈魂可以是使用xargs
標誌xargs -0直接從手冊頁選項
選項 -0, –null
輸入項以空字元而不是空格結尾,並且引號和反斜杠不是特殊的(每個字元都按字面意思表示)。禁用文件字元串的結尾,它被視為任何其他參數。當輸入項可能包含空格、引號或反斜杠時很有用。GNU find -print0 選項產生適合這種模式的輸入。
-d
我已經在 GNU 系統上檢查過,使用選項(而不僅僅是)將分隔符設置為特定值(如換行符)-0
也會導致xargs
不特別對待引號等:-bash-4.3$ { echo "a'b'c"; echo d; } | xargs -d$'\n' echo a'b'c d -bash-4.3$ rpm -qf "$(which xargs)" findutils-4.6.0.0.99.11a05-alt1.x86_64 -bash-4.3$ { echo "a'b'c"; echo d; } | xargs echo abc d -bash-4.3$
對於 GNU xargs,我在手冊頁中找到了另一個解決方案:明確指定分隔符為 ‘\n’。這將關閉對引號的特殊處理:
–delimiter = 共享,-d 共享
輸入項以指定字元結束。指定的分隔符可以是單個字元、C 樣式的字元轉義符(例如 \n)或八進製或十六進制轉義碼。八進制和十六進制轉義碼被理解為用於 printf 命令。不支持多字節字元。在處理輸入時,引號和反斜杠並不特殊;輸入中的每個字元都是按字面意思理解的。
所以,
echo "/Place/='http://www.google.com'" | xargs -d'\n' echo
輸出
/Place/='http://www.google.com'