2012-10-22 1 views
1

내가 다른 프로그램에 변수를 전달하는 떠들썩한 파티 스크립트를 쓰는 사람으로 변수를 전달합니다배쉬 : 단일 매개 변수/쉘 인용 매개 변수

문제가
./program $variable 

, 그것은 변수 $에 절대적으로 필요하다 공백을 포함하고 있지 않은 경우 단일 매개 변수로 전달됩니다.

variable=Hello World 
./program $variable 
-> program receives two arguments: 'Hello' 'World' 

는 모든 (잘, bash는 개발자들)에서 아무것도하지 않습니다 인용 :

variable=Hello World 
./program "$variable" 
-> program receives: 'Hello' 'World' 

두 번이 미친 것들 (물론, bash는 개발자들을 수행) 않습니다 인용이 :

variable=Hello World 
./program "'$variable'" 
-> program receives: "'Hello" "World'" 

쉬운 방법이 있나요? 젠장,이 일을하는 방법이 있니?

업데이트 : 좋아요, 문제는 bash로 보이지 않으므로 여기에 몇 가지 추가 정보가 있습니다. 인수를 전달하는 프로그램은 파이썬 스크립트입니다. 어떤 식 으로든 인수를 수정하지 않고도 얻을 수 있습니다.

print sys.argv 
-> ['/usr/bin/program', "'Hello", "World'"] 

어떻게 해결할 수 있습니까?

편집 : $ 변수를 선언하지 않기 때문에 아니, 난

variable="Hello World" 

을 시도하지 않았습니다. 내 bash 함수 내에서 선언되지 않았으므로 수정할 수 없습니다.

편집 : 좋아요, 나는 그렇게 작동합니다.

local temp="$variable" 
./program "$temp" 
내가 그런 식으로가 아니라 다른 방식으로 작동하는 이유하지만 알고 싶습니다

.

+1

문제가 "프로그램"에서와 같이 뭔가 이상한에 IFS 설정에 arround를 그것을 작동 할 수 있습니다; './program "$ variable"는 공백을 포함 할 수있는 하나의 인수를 전달하며, 프로그램은 무엇을하고 있는가? –

+2

'variable = "Hello World"로 시도한 적이 있습니까? – Vijay

+0

@sarathi : 아니요, 실제로 $ 변수를 선언하지 않았으므로 아닙니다. 나는 단지 그것을 전달한다. –

답변

0

문제는 "프로그램"

variable="Hello World" # quotes are needed because of the space 
./program "$variable"  # here quotes again 

내부 및

echo "program received $# arguments:" 
i=1 
for arg in "[email protected]"  # again quotes needed 
do echo "arg $((i=i+1)): '$arg'" # and again 
done 
0

이것은 프로그램에서 변수를 읽는 방식에서 거의 확실하게 문제가됩니다. 예를 들어
는 생각이 스크립트 (테스트 한 라인)입니다 :

echo "$1" 

이 현실을 부르 자 echo.sh. echo.sh "test best"을 실행하면 test best이 표시됩니다.

그러나 프로그램이

echo $1 

을 말한다면 당신은 당신이보고있는 것 같은 동작을 얻을 수 있습니다.

1

당신이 var="hello world"와 함께 시도 않았다 프로그램 안에 것 같다?

나는 이것을 나의 솔라리스 상자에서 시험해 보았습니다.

> setenv var "hello world" 
> cat temp.sh 
#!/bin/sh 

echo $1 
echo $2 
> ./temp.sh "$var" 
hello world 

> 

표시되는대로 $2은 인쇄되지 않습니다. $var은 하나의 인수로 간주됩니다.

1

스크립트를 호출 할 때 따옴표 안에 인수를 전달하십시오.

스크립트 예 : 당신이 그것을 호출 할 때

#!/bin/bash 
for arg in "[email protected]"; do 
echo "arg: $1"; 
shift; 
done 

가 :

./program "parameter with multiple words" parameter2 parameter3 "another parameter" 

출력은해야한다 :

arg: parameter with multiple words 
arg: parameter2 
arg: parameter3 
arg: another parameter 
1

http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html에 보라.

변수 확장은 명령 줄 매개 변수보다 먼저 수행되므로 문제가 발생합니다.

당신은

IFS='###' V='foo bar baz'; ./program $V 
+0

링크 및 설명 주셔서 감사합니다. 그 가이드를 보면, 나는 배쉬 좋아하지 않을 것 같습니다. –