다음과 같이 빌드하는 변수가 있습니다.
ATTSTR=""
for file in $LOCALDIR/*.pdf
do
ATTSTR="${ATTSTR} -a \"${file}\""
done
이제 변수에는 다음이 포함됩니다(파일 이름에 공백이 있음).
ATTSTR=' -a "/tmp/Testpage - PDFCreator.pdf"'
이제 다음과 같은 명령에서 이 변수를 사용하고 싶습니다.
mutt -s "Subject" "${ATTSTR}" [email protected]
그러나 다음과 같이 확장되어 명령이 실패하는 것으로 나타났습니다(확장된 변수 주위에 추가된 작은따옴표에 유의하세요).
mutt -s "Subject" ' -a "/tmp/Testpage - PDFCreator.pdf"' [email protected]
작은 따옴표 없이 변수를 확장하고 싶습니다. "$ATTSTR"
or 를 사용하면 $ATTSTR
더 나쁩니다. 어떻게 이를 달성할 수 있습니까?
답변1
확장된 문자열에서는 파일 이름을 신뢰할 수 없는 것으로 악명이 높습니다. 이 유혹에 저항하십시오.
대신정렬공백에 관계없이 파일 이름을 그대로 유지하려면 다음을 수행하십시오.
arr=()
for f in $somedir/*.pdf
do
arr+=( -a "$f")
done
# and for usage/display:
mutt -s mysubject "${a[@]}" some@body
참조배열에 대한 Bash 가이드참고용.
답변2
평가 기능 사용
command="mutt -s \"Subject\" $ATTSTR [email protected]"
response=$(eval "$command")