シェルでの感嘆符のエスケープ(if / thenコンストラクトの否定)?


1

私はこれをシェルで直接使用して、スクリプトの結果をテストすることがよくあります。

$ if [ -d mydirectory ] ; then echo YES ; fi
YES

ただし、感嘆符を使用して否定を使用する場合、失敗します(実際には失敗しませんが、キーボード入力を待機している複数行モードになり、Ctrl-Cを使用してエスケープする必要があります):

$ if [ ! -d makehuman ] ; then echo YES ; if
> 
> ^C
$ if [ \! -d makehuman ] ; then echo YES ; if
> 
> ^C

否定感嘆符をシェルで直接使用するにはどうすればよいですか?


2
私は置く$?私にPS1いつもプロンプト最後フォアグラウンドコマンドの終了ステータスを示します。これにより[ -d mydir ]、現在のプロンプトを実行して確認するのと同じくらい簡単に条件をテストできます。入力を少なくし、プロンプトを使用しないでテストする別の方法は[ -d mydir ] && echo yesです。
jw013

@ jw013のヒントをありがとう、気づかなかった$?-乾杯!
sdaau

回答:


1

Bashコマンドラインでは、感嘆符をすべての特殊文字と同様にバックスラッシュでエスケープできます。ifただし、正しい構文を忘れないでください!

$ if [ \! -d mydirectory ]; then echo Yay; else echo Nay; fi

@Kerrek SB-それを心に留めておいてくれてありがとう...乾杯!
sdaau

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.