私の知る限り&
、コマンドの後に使用することは、コマンドをバックグラウンドで実行するためです。
&
使用例:tar -czf file.tar.gz dirname &
しかし、どう&&
ですか?(この例を見てください:https : //serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188)
私の知る限り&
、コマンドの後に使用することは、コマンドをバックグラウンドで実行するためです。
&
使用例:tar -czf file.tar.gz dirname &
しかし、どう&&
ですか?(この例を見てください:https : //serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188)
回答:
さらに、||
どちらが論理ORであるか、そして;
どちらが以前のコマンドで何が起こったかを気にしない単なるセパレータでもあります。
$ false || echo "Oops, fail"
Oops, fail
$ true || echo "Will not be printed"
$
$ true && echo "Things went well"
Things went well
$ false && echo "Will not be printed"
$
$ false ; echo "This will always run"
This will always run
これについての詳細は、Bashマニュアルの「コマンドのリスト」を参照してください。
コマンドライン-の目的は
&&
何ですか?
シェルで、あなたが見るとき
$ command one && command two
その目的は&&
、最初のコマンドが成功した場合にのみ、次のコマンドを実行することです。これはPosixシェルの慣用句であり、Bashでのみ見られるものではありません。
最初のプロセスが失敗した場合、2番目のプロセスの実行を防ぐことを目的としています。
私が「意図」という言葉を使用したことに気付くかもしれません-それは正当な理由によるものです。すべてのプログラムが同じ動作をするわけではないので、これが機能するためには、プログラムおよび「必要に応じてソースコード」を読むことによって、プログラムが「障害」と見なすものとそれがどのように処理されるかを理解する必要があります。
プログラムは終了時にシグナルを返します。正常に終了した場合は0を返し、正常に終了しなかった場合は0より大きい値を返す必要があります。これにより、プロセス間の限られた量の通信が可能になります。
&&
呼ばれるAND_IF
でPOSIXシェル文法の一部であり、and_or
リストにも含まれるコマンドの、||
あるOR_IF
同様のセマンティクスを。
ドキュメントから引用された文法記号:
%token AND_IF OR_IF DSEMI /* '&&' '||' ';;' */
任意の数のことを示している(また、ドキュメントから引用)文法、AND_IF
S( &&
)および/またはOR_IF
sが(||
(AS)つなぎ合わせすることができるand_or
再帰的に定義されています)。
and_or : pipeline | and_or AND_IF linebreak pipeline | and_or OR_IF linebreak pipeline
両方の演算子の優先順位は等しく、左から右に評価されます(これらは左結合です)。ドキュメントが言うように:
AND-OR
リストには、オペレータによって区切られた1つのまたは複数のパイプラインのシーケンスである"&&"
と"||"
。リストには、オペレータによって区切られた1つまたは複数のAND-ORリストのシーケンスである
';'
と'&'
し、必要に応じてで終了し';'
、'&'
または。演算子
"&&"
と"||"
は優先順位が等しく、左結合性で評価されます。たとえば、次のコマンドはどちらも標準出力にbarのみを書き込みます。$ false && echo foo || echo bar $ true || echo foo && echo bar
最初のケースでは、falseは次のステータスで終了するコマンドです 1
$ false
$ echo $?
1
その手段echo foo
に実行されない(すなわち、短絡echo foo
)。次に、コマンドecho bar
が実行されます。
2番目のケースでは、trueは次のコードで終了します。 0
$ true
$ echo $?
0
したがってecho foo
、実行されずに実行echo bar
されます。
「&&」のごく一般的な使用法は、autotoolsを使用してソフトウェアをコンパイルすることです。例えば:
./configure --prefix=/usr && make && sudo make install
基本的に、configureが成功した場合はmakeが実行されてコンパイルされ、それが成功した場合はmakeがrootとして実行されてプログラムをインストールします。うまくいくと確信しているときにこれを使用します。これにより、進捗状況を「監視」するのではなく、stackoverflowを見るなど、他の重要なことを行うことができます。
時々私は本当に夢中になっています...
tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf
これは、たとえばLinuxを最初から作成するときに行います。
set -o errexit
場合はBashを使用します。
&&
文字列コマンドを一緒に。後続のコマンドは、先行するコマンドが成功した場合にのみ実行されます。
同様に、||
前のコマンドが失敗した場合に、後続のコマンドを実行できます。
Bash Shell Programmingを参照してください。
最初のステートメントが正常に終了した場合、2番目のステートメントを実行します。ifステートメントのように:
if (1 == 1 && 2 == 2)
echo "test;"
最初は1 == 1の場合に試行し、それがtrueの場合は2 == 2かどうかを確認します
&&
if
テストがbashでどのように機能するかについての素晴らしい洞察です。私はそれを比較コマンドのチェーンのように考えたことはなく、それらのいずれかが失敗したときに壊れていました。だからあなたは私の
||
それらのいずれかが成功するまでチェーンコマンドに、: eei || leu || uie || echo prout3 || echo "never executed"
command_1 && command_2
:command_1が正常に実行された場合にのみcommand_2を実行します。
command_1 || command_2
:command_1が正常に実行されなかった場合にのみcommand_2を実行します。
で、「もし」条件が同様、主流のプログラミング言語で実行される方法と同様に感じているif (condition_1 && condition_2){...}
condition_2 condition_1がある場合は省略されるfalse
としてif (condition_1 || condition_2){...}
condition_1がある場合は省略されますcondition_2 true
。見てください、それはあなたがコーディングに使用するのと同じトリックです:)
####################### && or (Logical AND) ######################
first_command="1"
two_command="2"
if [[ ($first_command == 1) && ($two_command == 2)]];then
echo "Equal"
fi
プログラムがコマンドかどうかをチェックすると、プログラムは終了コードと呼ばれる数を作成します。両方の条件が真の場合、終了コードはゼロ(0)です。それ以外の場合、終了コードは正の数です。終了コードがゼロ(0)で生成され、両方の条件が真である場合にEqualを表示する場合のみ。
if [[ ($first_command == "1") && ($two_command == "2") ]];then echo "Equal"; fi
false && echo "Will not be printed"
。