작은따옴표로 확장되는 bash 변수 관련 문제

작은따옴표로 확장되는 bash 변수 관련 문제

다음과 같이 빌드하는 변수가 있습니다.

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")

관련 정보