相同的 tr 翻译在某些机器上失败

相同的 tr 翻译在某些机器上失败

我使用下面的代码,但失败了。

$ 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全局(两个开头的斜杠)搜索和替换在哪里进行。

相关内容