为什么 subshell 命令在通过 xargs 进行管道传输时不能与 echo 一起使用?
Why subshell command doesn't work with echo when piped via xargs?
当我将管道 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
参数不是一个选项
如果你想在子 shell 中执行 basename
然后使用它:
echo './foo/bar.jpg' |
xargs -I {} bash -c 'echo "$(basename "")"' _ '{}'
bar.jpg
我们将虚拟值 _
作为 [=13=]
传递给子外壳,占位符 {}
将作为
传递给子外壳
当我将管道 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
参数不是一个选项
如果你想在子 shell 中执行 basename
然后使用它:
echo './foo/bar.jpg' |
xargs -I {} bash -c 'echo "$(basename "")"' _ '{}'
bar.jpg
我们将虚拟值 _
作为 [=13=]
传递给子外壳,占位符 {}
将作为