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
셸에 중요한 변수가 손상되는 것을 방지할 수 있습니다.