为什么tr -d用 - 替换目标?

时间:2013-04-18 14:51:57

标签: unix tr

根据男人的说法:

-d, - 删除SET1中的删除字符,不要翻译

然而

$ echo "abc" | tr "a" -d 
-bc

现在可以使用其他命令(例如

)将其删除
echo "abc" | tr "a" -d | sed 's/-//'

但我在这里错过了一些东西吗?为什么删除用 - ?

替换

2 个答案:

答案 0 :(得分:2)

你做错了。您在SET1之前传递了该选项,正如手册中所说tr [-Ccu] -d string1。所以你的命令应该是echo "abc" | tr -d "a"

命令tr "a" -d将所有a替换为-。尝试以下命令,你会弄清楚发生了什么......

echo "abc" | tr "a" de

echo "abc" | tr "a" +e

答案 1 :(得分:1)

您的选项和参数的顺序错误:

tr "a" -d

标准命令行语法是在所有非选项参数之前提供选项,如下所示:

tr -d a

在此语法下,第一个非选项参数(或显式参数--)终止选项处理,之后命令行上的所有其他内容都是参数。

gcc这样的一些命令传统上违反了这个约定并将参数与参数混合在一起。在这种情况下,通常是因为选项和参数的排序很重要(通常,选项仅适用于跟随它们的参数,但不适用于它们之前的参数)。

此外,一些命令放宽了规则并允许在每种情况下使用参数混合选项,但这是非标准的,通常不应使用,特别是如果您希望代码尽可能兼容/可移植。 / p>