在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
。我无法弄清楚错误。
答案 0 :(得分:7)
tr
不需要括号:
tr a-z A-Z
[a-z]
对您的shell有特殊含义(扩展为匹配文件名列表)。可能在目录中没有匹配的文件(或几个匹配的文件)。
答案 1 :(得分: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
答案 2 :(得分:0)
您要使用[:upper:]
[:lower:]
来避免文件名和表达式的歧义。
回显“ abc” | tr [:lower:] [:upper:]