3

在 unix 中,该行echo "abc" | tr [a-z] [A-Z]显示以下错误:

    tr: extra operand `b'
    Try tr --help' for more information.

ABC如果它从同一服务器或任何其他服务器中的任何其他目录运行,它不会显示错误并打印正确的输出。在特定目录中,它显示上述错误。
我验证并发现没有这样的冲突文件或脚本。不存在名为 的脚本tr
which tr目录内和目录外的命令给出相同的输出/usr/bin/tr
代替tr,我什至试图echo "abc" | /usr/bin/tr [a-z] [A-Z]避免与其他文件发生冲突(如果有的话)。但同样的错误仍然存​​在。
如果我尝试echo "abc" | tr 'a' 'B',它会产生输出为Bbc. 我无法找出错误。

4

3 回答 3

9

tr不需要括号:

tr a-z A-Z

[a-z]对您的 shell 有特殊含义(扩展为匹配文件名的列表)。目录中可能有一个匹配的文件(或多个匹配的文件)不起作用。

于 2013-02-01T12:15:34.433 回答
0

您想用来[:upper:] [:lower:]避免模棱两可的文件名和表达式。

回声“ABC” | tr [:下:] [:上:]

于 2019-01-15T03:45:03.667 回答
0

是的,它是正确的,tr [a-z]除了转换它会寻找一个从a到开始的文件名,z在这种情况下[a-z]转换为那个文件

转到用户主目录并查找文件名,例如

ls -lrth 

-rw-r--r--   1 root         root          1.5M Aug  3 11:02 a

重命名它

mv a a_backup
于 2016-09-04T13:52:50.397 回答