位置パラメータが機能しません。 $ 1、$ 2などにアクセスできません。

位置パラメータが機能しません。 $ 1、$ 2などにアクセスできません。

位置パラメータについて調べてみます。何も動作していないようで、実際に動作していることを確認するために、echoを使用していくつかのタスクを実行することにしましたが、動作しませんでした。誰でも理由を説明できますか? (ここでシャーバンラインとコメントは省略してすぐに本論に入ります)

if [[ -e $1 ]]; then
    echo $#
    echo $1
fi

スクリプト名と1つ以上のパラメータを入力すると、何も返されません。しかし、次は期待どおりにすべてを返します。本当に圧倒されました。

if [[ -e $0 ]]; then
    echo $#
    echo $1
fi

$ 0以外のパラメータはなぜ認識されませんか?

ベストアンサー1

Bashのマニュアルページ:

CONDITIONAL EXPRESSIONS
    Conditional expressions are used by the [[ compound command
    and the test and [ builtin commands to test file attributes
    and perform string and arithmetic comparisons.

       -e file
              True if file exists.

したがって、既存のファイルと一致しない文字列を最初の引数として渡すと[[ -e $1 ]]false になります。

ただし、$0通常はシェルまたはスクリプトの名前が含まれているため、[[ -e $0 ]]本物の可能性が高くなります。

(ただし、すべての場合に当てはまるわけではありません。インタラクティブシェルはログインシェルで始まり、ダッシュ($0たとえば-/bin/bash)などの項目/bin/sh -c '...' foo barがに設定されています$0fooそこに必要なものを含めることができます。


おそらく希望のテストは次のとおりです-n

   string
   -n string
          True if the length of string is non-zero.

だから、[[ -n $1 ]]または単に[[ $1 ]]

おすすめ記事