Shellcheckは、bashスクリプトのコマンドに変数の2つの引数を渡す方法を承認しました。

Shellcheckは、bashスクリプトのコマンドに変数の2つの引数を渡す方法を承認しました。

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[@]}"

おすすめ記事