根据 tr 人的说法:
-d, --delete 删除 SET1 中的字符,不翻译
然而
$ echo "abc" | tr "a" -d
-bc
现在可以使用附加命令将其删除,例如
echo "abc" | tr "a" -d | sed 's/-//'
但我在这里错过了什么吗?为什么 delete 用 - 替换?
你这样做是不对的。SET1
正如手册所说,您之前通过了该选项tr [-Ccu] -d string1
。所以你的命令应该是echo "abc" | tr -d "a"
.
该命令tr "a" -d
将全部替换a
为-
. 试试下面的命令,你会弄清楚发生了什么更好..
echo "abc" | tr "a" de
echo "abc" | tr "a" +e
您的选项和参数的顺序错误:
tr "a" -d
标准命令行语法是在所有非选项参数之前提供选项,如下所示:
tr -d a
在这种语法下,第一个非选项参数(或显式参数--
)终止选项处理,命令行上之后的所有其他内容都是一个参数。
一些命令像gcc
传统上打破了这个约定并将选项与参数混合在一起。在这种情况下,通常是因为选项和参数的顺序很重要(通常,选项仅适用于它们之后的参数,而不适用于它们之前的参数)。
此外,一些命令放宽了规则并允许在每种情况下将选项与参数混合,但这是非标准的,通常不应该使用,特别是如果您希望代码尽可能兼容/可移植。