私はシェルスクリプトをあまりしないので読んで少し驚きました。出荷書類ビーチgit submodule
この記事では、彼らが使用する構文を見ました。
サブモジュールのコマンドでゼロ以外の戻りが発生すると、処理は終了します。これは
|| :
コマンドの最後に追加することで上書きできます。
|| :
コマンドを強制的に正常に終了するための略称でこれを見つける必要がありました。コマンドを正常に終了する必要があるたびにを使用します|| true
。|| :
これはより慣用的なものと見なされますか?
答え1
true
Bourne シェルに組み込まれていません。いつもそうです(これは以前に紹介された:
コメント入力方式でした)。#
そして、タイピング時間が短いので、人々が好む:
ものかもしれませんtrue
。
POSIXシェルの別の違いに注意してください(その場合はbash
POSIXモードでのみ)。 whileはtrue
一般的な組み込みコマンドです(組み込みコマンドである必要はありません)。:
特別な内蔵。これはいくつかの影響を及ぼし、そのほとんどはこの特別な場合には影響しません。
コマンドが失敗すると
:
(リダイレクト失敗を含む)、シェルは終了します。実際にリダイレクトを次に渡さない限り、これはおそらく影響しません。:
$ sh -c ': > / ; echo HERE' sh: 1: cannot create /: Is a directory $ sh -c 'true > /; echo HERE' sh: 1: cannot create /: Is a directory HERE
では、次ではなく
var=value :
after return に設定されます。var
value
:
true
$ var=1; var=2 : ; echo "$var" 2 $ var=1; var=2 true; echo "$var" 1
また、|| true
一連のシェルで動作できますが、キャンセルすることはできません。rc
csh
|| :
set -e
csh
|| :
と等しくないことを:
意味します。または:
異なり(つまり、古いパイプラインが失敗した場合)
set -e
false
ゼロ以外の(失敗)終了状態set -e
(オプションとも呼ばれる)が原因でシェルがerrexit
終了するようにします。ゼロ以外の終了状態を返すコマンドが次のように使用されるfalse
場合set -e
状況図:
if false; then ...
while false; do ...
false && : ...
false || : ...
false && :
キャンセルのみ可能ですset -e
。キャンセルして終了ステータスを次に設定するfalse || :
効果は、より慣用的に言うと、コマンドの失敗した終了コードを無視しようとします。ほとんどの人はこれがより明確であると思います(意図をより明確に伝えます)。set -e
0
|| true
答え2
これらの応答のほとんどは解決に失敗します:
。
まず、この議論はシェル以外のものとは関係ありません。ボンシェル( sh
) 派生商品。つまり、すべての Bourne 派生シェルはtrue
と:
を同じものとして扱います。プログラマは常に組み込まれているため、:
代わりに使用することをお勧めしますが、過去には場合によっては常に組み込まれていませんでした。true
:
true
:
2つの用途があります。と同義ではありませんが、#
他の機能を持っています。でスクリプトをデバッグするときにset -x
使用された行は#
パーサーによって削除され、完全に無視されますが、使用された行は解析され:
評価されます。これは-x
行の下に表示され評価された値を表示するため、デバッグに非常に役立ちます。これは、モードでのみ表示されるprint
ステートメントをコードに入れるのと同じです-x
。以下の値:
は実際のコードなので、副作用がプログラムに影響を与える可能性がありますのでご注意ください。
答え3
通常、bashではコロン:
とtrue
同じです。
|| :もっと慣用的だと思いますか?
私はこれがベースだと思います。コンテキスト。
return value
aまたはaが常に真になるようにするには、キーワードをcondition
使用する必要があります。true
これにより、コードがより明確になり、視聴者に強調したい価値を伝えることができます。本物、つまり:
while true; do something
または
<commnad>
RETURN_VALUE= $? || true
欲しいなら何もしなかったまたは、NOP
シェルではコロンを使用する必要があります。:
if condition
then
: # DO NOTHING HERE
else
do something
fi
または
while conditon
do
: # DO NOTHING HERE
done