bashスクリプトで処理するために必要なtxtファイルから変数を取得するには?

bashスクリプトで処理するために必要なtxtファイルから変数を取得するには?

setup.txt次のデータを含むtxtというファイルがあります。

DSN=ZXP.SOURCE
PATH=/z/zxp/20211015
SCHEMA=ZXP
URL=https://zxp-support.mybluemix.net/contest/4q21/contact-sheet
OUTPUT=OUTPUT(RESULT)
REPORT=q421report

このファイルをスクリプトにパラメータとして渡す必要がありますが、シェルスクリプトの初心者としてこのファイルを使用するとエラーが発生し、ファイルsource setup.txt内のすべてを実行しているようです。

input="$1"
source $1

if [ $# -ne 1 ]
  then
    printf "Usage Example: ./q421droop5.sh setup.txt \n\n"

    exit 1
fi
if test -f "$input"; then
    echo "$input exists."
    content=$(cat $input
fi
echo $DSN
echo $SCHEMA #echoing the variables give me errors

変数にどのようにアクセスしますか?

答え1

mapfile以下を使用できますdeclare

$ mapfile -t a < setup.txt
$ declare "${a[@]}" 
$ echo "$DSN"
ZXP.SOURCE
$ echo "$SCHEMA"
ZXP

答え2

コマンドに役立つヒントdeclare。ところで、なぜ「コマンド置換」を使用しないのですか?

declare  $(<setup.txt)

答え3

各行setup.txtに 1 つが含まれていると仮定し、variable=valueここでは連想配列を使用して実行します。

typeset -A field=()
while IFS= read -r line; do
  case $line in
    ([^=#]*=*) field[${line%%=*}]=${line#*=}
  esac
done < setup.txt

そして、以下を使用してください:

printf '%s\n' "${field[DSN]}" "${field[PATH]}"

これにより、任意のコマンド注入の脆弱性( - ベースのメソッドa[$(would-rm -rf ~)]=gotchaにも影響を与えるためdeclare)を防ぎ、あなたの場合、$PATHシェルに重要な変数が破損するのを防ぎます。

関連情報