GNU/Linux >> Linux の 問題 >  >> Linux

コロンビルトイン「:」はどのような目的に役立ちますか?

私は多くのシェルスクリプトをハッキングしましたが、最も単純なことが私を困惑させることがあります。今日、私は:を多用したスクリプトに出くわしました。 (コロン)bashビルトイン。

文書化は十分に単純なようです:

: (a colon)  
     : [arguments]  

引数を拡張してリダイレクトを実行する以外に何もしません。戻りステータスはゼロです。

ただし、これまではシェル拡張のデモンストレーションでのみ使用されていました。私が遭遇したスクリプトのユースケースは、この構造を広範囲に使用しました:

if [ -f ${file} ]; then
    grep some_string ${file} >> otherfile || :
    grep other_string ${file} >> otherfile || :
fi

実際には何百ものgrepsがありましたが、それらはほとんど同じです。上記の単純な構造以外に、入出力リダイレクトは存在しません。スクリプトの後半で戻り値はチェックされません。

私はこれを「または何もしない」という役に立たない構成として読んでいます。これらの不満を「または何もしない」で終わらせることはどのような目的に役立つでしょうか?どのような場合、この構成は単に|| : すべてのインスタンスから?

承認された回答:

:が表示されます スクリプト内のsは、trueの代わりに使用されています 。 grepの場合 ファイルに一致するものが見つからない場合は、ゼロ以外の終了コードが返されます。 jw013がコメントで言及しているように、errexitの場合 おそらく-eによって設定されます シバン行では、grepのいずれかがあれば、スクリプトは終了します。 ■一致するものが見つかりません。明らかに、それは作者が望んでいたことではないので、彼は|| : その特定の複合コマンドの終了ステータスを、より一般的な(私の経験では)|| true /|| /bin/true


Linux
  1. Psの出力にはどういう意味がありますか?

  2. Uniq -uのポイントとそれは何をしますか?

  3. Rackspaceはクラウドで何をしますか?

  1. 「mysql.sys@localhost」ユーザーの目的は何ですか

  2. Linuxの「ホイール」グループの目的は何ですか

  3. brk() システムコールは何をしますか?

  1. bashスクリプトで set -e とはどういう意味ですか?

  2. 実行権限は何をしますか?

  3. `.bashrc` などの 'rc' は何を意味していますか?