Bashスクリプトから別のプログラムを呼び出しますが、コマンドラインオプションを使用してそのプログラムを設定したいと思います。以下はうまくいきます:
AREA_ARG=""
if __SOME_SETTING__ ; then
AREA_ARG=" --area us,ca "
fi
process_data -i /some/path $AREA_ARG
つまり、bash実行process_data -i /some/path
またはprocess_data -i /some/path --area us,ca
。
しかし、shellcheck
文句!
$ shellcheck test.sh
In test.sh line 7:
process_data -i /some/path $AREA_ARG
^-------^ SC2086: Double quote to prevent globbing and word splitting.
Did you mean:
process_data -i /some/path "$AREA_ARG"
For more information:
https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...
私は真実を理解していますが、考える/必要2つの引数を得るために空間的に分割される変数ですprocess_data
。
これを行う正しい方法は何ですかbash
?
ベストアンサー1
配列の使用
配列を使用して書き換えたコードは次のとおりです。また、作業例(ls
コマンドの代わりに)であり、正しい変数の大文字と小文字を使用します(コーディング標準では、大文字の名前がシステムに予約されていることを示します)。
#!/bin/bash
area_args=()
if true ; then
area_args=(-l -a)
fi
ls "${area_args[@]}"