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
伝統的にこの規則を破り、オプションと引数を混在させます。この場合、それは通常、オプションと引数の順序が重要であるためです (通常、オプションはそれに続く引数にのみ適用され、その前の引数には適用されません)。
また、一部のコマンドではルールが緩和され、すべての場合にオプションを引数と混在させることができますが、これは非標準であり、特にコードの互換性/移植性を可能な限り高めたい場合は、通常は使用しないでください。