전혀 이해가 안 돼요
명령줄(유효함):
$ someprog -flag 'key1=val 1,key2=val 2,key3=val 3'
sh 직접적으로 (효과적으로):
#!/bin/sh
someprog -flag 'key1=val 1,key2=val 2,key3=val 3'
sh 변수(실패):
#!/bin/sh
OPTSTR="'key1=val 1,key2=val 2,key3=val 3'"
someprog -flag "$OPTSTR" #fails
someprog -flag ${OPTSTR} #fails
someprog -flag $OPTSTR #fails
eval "someprog -flag $OPTSTR" #works
답변1
처음 두 예에서는 자신의 주장을 인용했습니다. 이러한 따옴표는 전체 문자열을 공백으로 분할하지 않고 단일 인수로 처리하는 쉘에서만 볼 수 있습니다. 프로그램은 따옴표 자체를 볼 수 없습니다.
OPTSTR="'key1=val 1,key2=val 2,key3=val 3'"
변수 내용을 입력할 때 작은따옴표를 포함하면 나중에 프로그램에서 사용할 수 있습니다. 귀하의 프로그램은 따옴표를 보지만 이를 기대하지 않으므로 실패합니다.
그냥 사용:
OPTSTR="key1=val 1,key2=val 2,key3=val 3"
someprog -flag "$OPTSTR"
작은따옴표와 큰따옴표의 차이점은 쉘이 변수 등을 대체할지 여부입니다.