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에 하나의 가 포함되어 있다고 가정하고 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셸에 중요한 변수가 손상되는 것을 방지할 수 있습니다.

관련 정보