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 に答える