管道运算符和 $() 之间有什么区别?

管道运算符和 $() 之间有什么区别?
mint@mint-VirtualBox:/$ ls -l $(which cp)
-rwxr-xr-x 1 root root 153976 Sep  5  2019 /usr/bin/cp
mint@mint-VirtualBox:/$ which cp | ls -l
total 1043228
lrwxrwxrwx   1 root root          7 Jan 21 15:09 bin -> usr/bin
drwxr-xr-x   4 root root       4096 Jan 21 15:22 boot
drwxr-xr-x   2 root root       4096 Jan 21 15:10 cdrom
drwxr-xr-x  18 root root       4100 Jan 22 20:33 dev
drwxr-xr-x 149 root root      12288 Jan 21 15:22 etc
drwxr-xr-x   3 root root       4096 Jan 21 15:11 home
lrwxrwxrwx   1 root root          7 Jan 21 15:09 lib -> usr/lib
lrwxrwxrwx   1 root root          9 Jan 21 15:09 lib32 -> usr/lib32
lrwxrwxrwx   1 root root          9 Jan 21 15:09 lib64 -> usr/lib64
lrwxrwxrwx   1 root root         10 Jan 21 15:09 libx32 -> usr/libx32
drwx------   2 root root      16384 Jan 21 15:09 lost+found
drwxr-xr-x   2 root root       4096 Jan  3 18:00 media
drwxr-xr-x   2 root root       4096 Jan  3 18:00 mnt
drwxr-xr-x   2 root root       4096 Jan  3 18:00 opt
dr-xr-xr-x 162 root root          0 Jan 22 20:33 proc
drwx------   3 root root       4096 Jan 21 22:21 root
drwxr-xr-x  35 root root        960 Jan 22 20:38 run
lrwxrwxrwx   1 root root          8 Jan 21 15:09 sbin -> usr/sbin
drwxr-xr-x   2 root root       4096 Jan  3 18:00 srv
-rw-------   1 root root 1068185600 Jan 21 15:09 swapfile
dr-xr-xr-x  13 root root          0 Jan 22 20:33 sys
drwxrwxrwt  15 root root       4096 Jan 22 20:38 tmp
drwxr-xr-x  14 root root       4096 Jan  3 18:00 usr
drwxr-xr-x  11 root root       4096 Jan  3 18:34 var
mint@mint-VirtualBox:/$

为什么这两个命令会产生不同的结果?管道运算符将一个命令的输出与第二个命令的输入连接起来,并且由于的输出是which cp路径,cp它应该可以工作,还是不应该?

提前感谢您的时间,您好!

答案1

正如解释的那样卡西莫多的回答 ls不能对 stdin 进行操作,但您可以强制它这样做:

$ which cp | xargs  ls -l
-rwxr-xr-x 1 root root 153976 Sep  5  2019 /usr/bin/cp

输入 即可查看有关 xargs 的更多信息man xargs

看看为什么不使用“which”?那么用什么呢?

答案2

which cp | ls

尝试将 的标准输出馈送which cp到 的标准输入ls。但是lsPOSIX 规范内容如下:

标准输入
不曾用过

因此您无法将任何内容导入ls。另一方面,在

ls "$(which cp)"

的输出which cp争论ls,当然可以接受参数(顺便说一下,引用上述命令替换是一种很好的做法)。

相关内容