나는 다음과 같은 것을 실행해야합니다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,b
mycommand
-f
a,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"