
位置パラメータについて調べてみます。何も動作していないようで、実際に動作していることを確認するために、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
がに設定されています$0
。foo
そこに必要なものを含めることができます。
おそらく希望のテストは次のとおりです-n
。
string
-n string
True if the length of string is non-zero.
だから、[[ -n $1 ]]
または単に[[ $1 ]]
。