當我使用帶有 subshel??l 的管道 xargs 時,echo我得到了這個
user@DESKTOP-P560BV8:~/tmp/t$ echo ./foo/bar.jpg | xargs -I{} echo "$(basename {})"
./foo/bar.jpg
但是,這有效
user@DESKTOP-P560BV8:~/tmp/t$ echo ./foo/bar.jpg | xargs -I{} basename {}
bar.jpg
如果我行內引數值
user@DESKTOP-P560BV8:~/tmp/t$ echo "$(basename ./foo/bar.jpg)"
bar.jpg
我不明白為什么會這樣?我需要xargs分別在文本的每一行上執行,所以-0引數不是一個選項
uj5u.com熱心網友回復:
如果要basename在子shell中執行,請以這種方式使用它:
echo './foo/bar.jpg' |
xargs -I {} bash -c 'echo "$(basename "$1")"' _ '{}'
bar.jpg
我們正在傳遞子shell的虛擬值_,$0占位符 {}將傳遞給子shell$1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/422220.html
標籤:
