スクリプトの変数比較

スクリプトの変数比較

私はこのステートメントを持っており、if [ ! - f "$i" -o "$i"x = "$MTR"x]このステートメントが何を達成しているのか知りたいです。最初の部分は変数がファイルではないことを確認しますiが、後ろの2番目の部分が何であるかはわかりません-o(論理的ORを意味するようです)。どんな助けでもとても役に立ちます。

答え1

そうですね。 -o は論理 OR を表します。変数sumの内容と
比較してみてください。変数の1つが設定されていないか初期化されていない場合は、問題を回避するために両方の変数に追加されているようです。"$i"x = "$MTR"x$i$MTR
x

答え2

ステートメントは次のとおりです。

if [ ! -f "$i" -o "$i"x = "$MTR"x ]

-f "$i"値が$i一般ファイル(または一般ファイルへのシンボリックリンク)に対応していることを確認してください。その後、そのテストを無効にします!。これは-o「論理的OR」を表現する古くて役に立たない方法です。

これらのテストはやや厄介な方法で行われます。これは、とが同じ文字列であるかどうかをテストするために"$i"x = "$MTR"x非常に古いシェル実装で必要になることがあります。sh$i$MTR

(現在) 標準shシェルでは、次の文が作成されます。

if [ ! -f "$i" ] || [ "$i" = "$MTR" ]

または少しのロジックを適用すると、

if [ "$i" = "$MTR" ] && [ -f "$i" ] || [ ! -f "$i" ]

つまり、$i同じ文字列が存在し、$MTR既存の汎用ファイル(またはそのファイルへのシンボリックリンク)を参照するか、ファイル名では$iない場合、そのステートメントは真です。

このステートメントが何を意味するのかを見るのはもっと面白いかもしれません。間違った$iとが同じ文字列でない場合にのみ$MTRそして $i既存のファイルを参照します。

関連情報