Bash コマンド引数の感嘆符

Bash コマンド引数の感嘆符

Bashに次のコマンドを入力した場合:

echo "dog!!"

文字列がわかりませんdog!!。代わりに別のものを得ました。

"dog!!"文字列をエコーし​​ようとしましたが、うまくいきませ"dog\!\!んでした。

感嘆符が2つあるときにコマンドパラメータを使用する方法は?

この感嘆符を特別な機能なしで感嘆符として扱いたいです。

感嘆符の2つが"!!"最後のコマンドのようです。

答え1

感嘆符を避けるか、次を使用する必要があります。一つ引用符:

echo dog\!\!
echo 'dog!!'

(あなたの仕事がうまくいかない理由を説明していませんが、うまくいくecho "dog\!\!"必要があり、なぜそれがうまくいかないのかわかりません。少なくとも記録で動作しないでください。Bashでは印刷されますdog\!\!。)

答え2

Bashで感嘆符を常に通常の文字として扱い、履歴拡張を必要としないようにするには、現在のシェルでこれを無効にできます。

set +o histexpand

または、次のコマンドを追加します。一般的に使用される構成ファイルつまり、.bashrcすべてのシェルに対して無効にする可能性が高いです。

答え3

存在するLinux Mint 18.1Ubuntu 16.04ベース:

bash --version | head -1
GNU bash, version 4.3.46(1)-release (x86_64-pc-linux-gnu)

動作は次のとおりです。

echo dog\!\!

結果:

dog!!
echo 'dog!!'

結果:

dog!!
echo "dog!!"

突然印刷以下は最終コマンドです。たとえば、ls以前にこれを行った場合は、次のように印刷されます。

echo "dogls"
dogls

存在するGNU/Linux Debian 9 拡張もう少し新しいバージョンがあります:

bash --version | head -1
GNU bash, version 4.4.11(1)-release (x86_64-pc-linux-gnu)

動作は次のとおりです。

echo dog\!\!

結果:

dog!!
echo 'dog!!'

結果:

dog!!
echo "dog!!"

突然印刷以下は最終コマンドです。たとえば、ls以前にこれを行った場合は、次のように印刷されます。

echo "dogls"
dogls

これは私にとって一貫しているようです。

以前のバージョンがインストールされている古いシステムでは、bash少し異なる動作をする可能性があります。ただし、新しいシステムではこれらの動作を予想できます。

関連情報