1

根据 tr 人的说法:

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

然而

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

现在可以使用附加命令将其删除,例如

echo "abc" | tr "a" -d | sed 's/-//'

但我在这里错过了什么吗?为什么 delete 用 - 替换?

4

2 回答 2

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
于 2013-04-18T14:55:44.097 回答
1

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

tr "a" -d

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

tr -d a

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

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

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

于 2013-04-18T14:59:43.573 回答