考慮事項:コマンドは、シェルスクリプトで明示的に何もしません。何が役に立ちますか?

考慮事項:コマンドは、シェルスクリプトで明示的に何もしません。何が役に立ちますか?

答えとしてシェルスクリプトのコメントに関するこの質問、これは:明示的に何もしない空のコマンドであることを示します(ただしコメントでは使用されません)。

何もしない命令がどんな役に立ちますか?

答え1

私は通常、trueループで使用する方が明確だと思います。

while true; do
    ...
done

この機能が本当に役に立つと思うところの1つ:は一致する必要がある項目がありますが、実際には何もしたくない場合のケースの説明です。たとえば、

case $answer in
    ([Yy]*) : ok ;;
    (*)     echo "stop."; exit 1 ;;
esac

答え2

最初は、Cコンパイルプログラムではなく、Bourneシェルプログラムであることを確認するために使用されました。これはshebangとさまざまなスクリプト言語(csh、perl)の前でした。次のスクリプトを引き続き実行できます:

$ echo : > /tmp/xyzzy
$ chmod +x /tmp/xyzzy
$ ./xyzzy

$SHELL通常、(or)に対してスクリプトを実行します/bin/sh

それ以来、主な用途はパラメータを評価することでした。私はまだ以下を使用しています:

: ${EDITOR:=vim}

スクリプトでデフォルト値を設定します。

答え3

:内部で終了する必要があるループを作成するのに役立ちます。

while :
do
    ...stuff...
done

これはbreak、またはが呼び出されない場合、またはexitシェルが終了シグナルを受け取らない限り、永久に実行されます。

答え4

#文字に加えて、私は行を一時的にコメントアウトするためにこの文字を使用したことがあります。この場合、行をコメントアウトすると、空のコマンドシーケンスを許可しないシェル構文の欠陥が原因で構文エラーが発生します。

if condition ; then
    :# temporarily commented out command
fi

それ以外の場合は、コマンドシーケンスが欠落している可能性があり、これは構文エラーです。

関連情報