我使用下面的代码,但失败了。
$ echo $TERM
xtermc
$ v=/bin:/usr/bin:/usr/local/bin ; echo $v | tr ':' '\n'
/binn/usr/binn/usr/local/bin
好像跳过了我的“/”。我不知道如何解决这个问题。我的shell是zsh。我换成了bash,但仍然失败。
但在另一台机器上,它可以工作。结果是
/bin
/usr/bin
/usr/local/bin
我发现有三个
/usr/local/bin/tr (GNU coreutils) 6.4
/usr/ucb/tr unkown version size 9916 bytes
/bin/tr size 19400 Usage: /bin/tr [ -cds ] [ String1 [ String2 ] ]
答案1
该问题是由不同的 tr 和不同的 PATH 设置引起的。
works: /usr/local/bin/tr (GNU coreutils) 6.4
failed: /usr/ucb/tr unkown version size 9916 bytes
works: /bin/tr size 19400 Usage: /bin/tr [ -cds ] [ String1 [ String2 ] ]
答案2
由于您使用的是 zsh,因此您可以使用这种方法,并且不再依赖任何外部命令:
$ v=/bin:/usr/bin:/usr/local/bin; print -l ${(s.:.)v}
/bin
/usr/bin
/usr/local/bin
怎么运行的:
- 参数扩展标志在冒号处
(s.:.)
拆分参数$v
(参见man zshexpn
) print -l
在一行上打印所有后续参数
如果你依赖换行符, 使用
$ print ${v//:/\\n}
//from/to
全局(两个开头的斜杠)搜索和替换在哪里进行。