echo $PATH | tr -d -c :
此输出为:
::::
$PATH
的值为:
/import/adams/2/z1/bin-pc.i86.linux:/import/adams/2/z1/bin:/usr/local/bin:/usr/bin:/bin
为什么我得到这样的输出;;;;
?我无法理解-d -c :. -c选项需要两个集合,但-d只需要一个集合。首先执行哪个选项?这个结果是如何产生的?
感谢。
答案 0 :(得分:1)
$ p=/import/adams/2/z1/bin-pc.i86.linux:/import/adams/2/z1/bin:/usr/local/bin:/usr/bin:/bin
$ echo "$p" | tr -d -c :
::::
-d
选项告诉tr
删除字符。
-c
选项表示使用后面字符集的补充。
由于后面的字符集为:
,因此删除除 :
之外的所有。这就是你看到你看到的输出的原因。
在下文中,字符集不仅包括:
,还包括/
。因此,除:
和/
之外的所有内容都将被删除:
$ echo "$p" | tr -d -c :/
/////://///:///://:/
在下文中,我们省略-c
并指定:
的字符集。因此,所有冒号都被删除:
$ echo "$p" | tr -d :
/import/adams/2/z1/bin-pc.i86.linux/import/adams/2/z1/bin/usr/local/bin/usr/bin/bin
答案 1 :(得分:0)
我无法重现您在输出中得到;
而不是:
,但是您要求tr
-d
选择-c
中的所有内容{1}} :
的实施,所有非:字符。
正如man 1 tr
所说:
-c, -C, --complement
use the complement of SET1
-d, --delete
delete characters in SET1, do not translate