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]シェルにとって特別な意味があります(一致するファイル名のリストに拡張されます)。おそらく、それが機能しないディレクトリに一致するファイル(またはいくつかの一致するファイル)があります。

于 2013-02-01T12:15:34.433 に答える
0

はい、それは正しいです。tr [a-z]変換以外は、から始まるファイル名を探しますazその場合[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 に答える
0

[:upper:] [:lower:]あいまいなファイル名と式を回避するために使用します。

エコー「abc」| tr [:lower:] [:upper:]

于 2019-01-15T03:45:03.667 に答える