sh 스크립트에서 인용된 문자열 매개변수 전달

sh 스크립트에서 인용된 문자열 매개변수 전달

전혀 이해가 안 돼요

명령줄(유효함):

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

작은따옴표와 큰따옴표의 차이점은 쉘이 변수 등을 대체할지 여부입니다.

관련 정보