端末にメッセージを表示しようとしたときに「!」を使用できないのはなぜですか?たとえば、
echo -e "Hello\nWorld!"
bash は次のコマンドを返します。
bash !: event not found
ベストアンサー1
この!
文字は「バン」と呼ばれ、bash
コマンド履歴を呼び出すために使用されます。次の 4 つの方法で使用できます。
!<firstFewCharsOfPreviousCommand>
例:
!rm
その後、「rm」で始まって最後に実行したコマンドに移動し、コマンド全体を実行します。はい注意深いrm などの潜在的に破壊的なコマンドを繰り返すことで、意図しない他のコマンドを誤って実行する可能性があります。上記は、bashのCTRL-R
リバース検索機能を使用する方がより安全な選択であることを示しています。
!<indexInCommandHistory>
例:
!433
インデックスは、コマンドを実行したときにコマンドの横に表示される番号ですhistory
。
!!
それが全部なので、はいは必要ありません。前のコマンドを再実行します(ほとんどのLinuxディストリビューションの上矢印と同じ)。
!$
例:
# ls -lh /etc/fstab
# vi !$
もう1つのリテラルは、bashが実行したときに!$
最後の単語(空白なしの文字列)に置き換えられます。
最後のコマンドで見たように、より大きいまたは他のコマンドの一部として使用することもできます。他の例!!
:
[root@hypervisor libsceptre]# echo hey
hey
[root@hypervisor libsceptre]# echo !!
echo echo hey <-- printed to stderr so you know what !! was expanded to
echo hey
[root@hypervisor libsceptre]#
bashが文字を解釈するのではなく、何らかの理由で文字をリテラルとして扱うようにするには、テキストを一重引用符で囲むことができます。
[root@hypervisor libsceptre]# echo -e "Hello\nWorld!"
-bash: !": event not found
[root@hypervisor libsceptre]# echo -e 'Hello\nWorld!'
Hello
World!
[root@hypervisor libsceptre]#
コマンドが機能しない理由は、二重引用符で始まる最後のコマンド(最初の例で説明した機能)を見つけるために見つからないためです。