テスト(AIXおよびksh93)

テスト(AIXおよびksh93)

私たちが使用しているksh93テスト修飾子の1つについて混乱しています。 20年以上前に、私たちは「Unix Shellプログラミング - KornShell機能」コースを受講しました。コースに付属のマニュアルには、ファイルが存在すると「-a filename」が成功することが示されています。それ以来、私たちは「-a」を広く使用してきました。私は最近、「-a」がテスト用の「バイナリAND演算子」であり(AIX 7.1ではksh93を使用しています)、「man test」がそのリンクと同じ出力を表示するというこのリンクを見つけました。

https://www.ibm.com/support/knowledgecenter/en/ssw_aix_71/com.ibm.aix.cmds5/test.htm

リンクは通常のAIXリンクとして表示されます。つまり、私にとっては、ksh、csh、shなどに限定されないので、どのように適用されるのかわかりません。

既存のコードが期待どおりに動作しているようです。現在、私たちがどのように使用するかの例は次のとおりです。

if [[ -a filename ]]
then
    ....
fi

ファイルテスト用の別の修飾子があることを知っていますが、マンページでは存在するかどうかを確認しないことを示唆していますが、「-a」が存在するかどうかを確認するように見える理由が疑問に思います。

よろしくお願いします。

答え1

kshマニュアルから:

   Conditional Expressions.
       A  conditional  expression  is  used with the [[ compound command to test attributes of files and to
       compare strings.  Field splitting and file name generation are not performed on the words between [[
       and  ]].   Each  expression  can  be  constructed  from one or more of the following unary or binary
       expressions:
       string True, if string is not null.
       -a file
              Same as -e below.  This is obsolete.
       -e file
              True, if file exists.

答え2

(または)のバイナリは、testシェルに組み込まれているバイナリとは異なります。シェルのドキュメントを参照してください。シェルによっては、バイナリではなくシェル組み込み関数を呼び出すか、実際に呼び出すこともできます。以下は、AIXや対応するKSHではありませんが、サポートされていないかフラグがありますが、サポートされているGabo BourneシェルまたはMac OS Xでは、次のようになります。[PATH[[[[test[mkshsh[[-amksh

$ sh
$ [[ -a /etc/passwd ]] && echo yea
[[: not found
$ [ -a /etc/passwd ] && echo yea
test: argument expected
$ exit
$ [[ -a /etc/passwd ]] && echo yea
yea
$ [ -a /etc/passwd ] && echo yea
yea
$ 

関連情報