큰따옴표가 있는 값 변수를 명령 매개변수로 사용하되 작은따옴표는 사용하지 마세요.

큰따옴표가 있는 값 변수를 명령 매개변수로 사용하되 작은따옴표는 사용하지 마세요.

나는 다음과 같은 것을 실행해야합니다mycommand -f "a","b"

하지만 이런 종류의 bash 스크립트에서 실행해야 합니다.

p="\"a\",\"b\""

mycommand -f "$p"

하지만 이 스크립트를 실행하면 시작 명령은 다음과 같습니다.

mycommand -f '"a","b"'

설마

mycommand -f "a","b"

작은따옴표 없이 매개변수로 어떻게 $p전달할 수 있나요?

답변1

run과 동일합니다. 또는 명령줄에서 실행 중인 경우입니다 mycommand -f "a","b". 쉘은 따옴표를 제거하고 인수는 따옴표가 없는 두 문자열의 합입니다.mycommand -f "a,b"mycommand -f a,bmycommand-fa,b

이제 후자를 변수에 넣으려면 추가 따옴표 없이 변수에 저장하고 와 비교하면 됩니다 "$var". 물론 값을 할당할 때 따옴표를 사용할 수 있으며 이는 제거됩니다. 문자열을 명령에 대한 인수로 직접 사용합니다.

var="a","b"         # or
var="a,b"           # or
var=a,b             
mycommand -f "$var"

물론 값이 실제로 foo bar, this that공백을 포함하거나 셸에 특수한 다른 문자를 포함하는 경우 최소한 몇 개의 따옴표가 필요합니다.

var="foo bar, this that"
mycommand -f "$var"

당신이 가지고 있다면:

p="\"a\",\"b\""
mycommand -f "$p"

그런 다음 따옴표와 이스케이프를 처리한 후 변수에 가 p포함되고 "a","b"인수 mycommand도 정확한 문자열이 됩니다. 이전과는 다른 문자열입니다.

의 경우 Bash, ksh 및 zsh는 매개변수를 다음 형식으로 표시하기 때문에 set -x이를 표시합니다.mycommand -f '"a","b"'쉘 입력으로 유효함, 큰따옴표가 포함된 문자열에는 따옴표가 필요합니다. 백슬래시는 작동하지만 여기서는 이러한 쉘이 작은따옴표를 선호합니다.

(반면에 Dash는 이 작업을 수행하지 않습니다. set -x왕복 여행을 그대로 유지하지 못하는 모호한 출력을 인쇄합니다.)

답변2

나는 아주 아주 바보 같다고 느낀다.

이것이 내 명령이 작동하는 방식입니다 mycommand -f "a","b". 큰따옴표 없이 실행하면 - mycommand -f a,b- 작동하지 않습니다.

그래서 변수에 이스케이프된 큰따옴표를 추가했습니다 p="\"a a\",\"b\"".

좀 더 정확해야 하는데, 실제 명령이 mycommand -f "a a","b".

나는 배워야 한다는 것을 깨달았습니다. 변수 값으로 따옴표를 추가할 필요가 없으며 모든 것이 정확하고 마법처럼 작동합니다.

설정한 p="a a,b"다음 간단히 실행할 수 있었습니다.mycommand -f "$p"

관련 정보