ここでは私が取り組んでいた楽しいコードスニペットがあり、私の人生は私が間違っていることを理解できません。あまりにも複雑な条件付き操作の質問
(chomp($CMD=`whereis blah | awk '{print \$2}'`) ||
chomp($CMD=`whereis cat | awk '{print \$2}'`)) ?
(print "$CMD\n") : (print "Neither command exists.");
print "$CMD\n";
これを実行すると、空の文字列が常に出力されます。私が知る限り、$ CMDへの2番目の割り当ては決して実行されません。純粋にデモンストレーションの目的で、私は「ああ」と「猫」を含めました。理想的には、指定されたシステムにインストールされているか、インストールされていないかもしれない2つのコマンドをチェックします。これが条件付きの内部に入れ子にされた2つの割り当てを持つ理由です。これらのどちらも見つからない場合(したがって2つの空の文字列)、私はfalse節を実行したいと思います。しかし、いずれかのコマンドが存在する場合は、それを$ CMDに割り当て、真の句を実行します(上の例では$ CMDを出力するだけです)。私は様々な組み合わせで演奏してきましたが、この作業を行うことはできません。
同じ結果を得るためにこれを分解して実行することができますが、好奇心と頑固さが私の方が優れている理由は分かりません。あなたが提供できるどんな助けも大歓迎です。
私はむしろ、空の文脈で条件演算子を使用することを嫌っています。あるいはawkに何かperlishをするよう呼びかけます。 – tchrist