2012-10-24 3 views
1

매우 정직하지만 셸 스크립팅에 대한 새 질문입니다. I는 다음과 같이 작성하는 것을 시도하고있다 :bash : 내부 변수 값 바꾸기

for i in {1..20} 
do 
    curl "something $i ........ -d 'something "$i" something' " 
done 

문제는 작은 따옴표 부분 ''내부의 두 번째 $i 교체되지 않고 있음입니다. 작동 시키려면 어떻게해야합니까?

답변

3

이 매개 변수는 따옴표 안에 확장되지 않습니다, 당신은 큰 따옴표를 사용해야합니다. 세 \ 가장 안쪽 " 전에,로가

 
$ foo=bar 
$ eval "echo \"something \\\"$foo\\\"\"" 
something "bar" 

하는 것으로 : 유일한 점은 그것이 이미 이중 인용 문자열에 발생하기 때문에,이 같은 백 슬래시 (\)로 탈출해야한다는 것입니다 이것은 두 번 확장됩니다 (인수를 평가할 때 eval을 한번 평가할 때 echo을 평가할 때 한 번)

1

작은 따옴표 안에있는 변수 ''이 대체되지 않기 때문입니다. 변수 치환을 원한다면 작은 따옴표를 제거해야합니다.

당신은 아마 당신이 인용이 변수

foo="something $i bla bla bla" 
curl "something ... ${foo}something" 
+1

전체 문장이 ""로 묶인 문자열이더라도? – Rndm

+0

예, 변수 치환은 큰 따옴표' ""'내에서 작동합니다. 나는 이것에 아무런 문제가 없다. 앞에서 언급 한 것처럼 작은 따옴표 내의 변수 만 대체되지 않습니다. – mana

0

가 정확하지 미리 초기화 coul. 두 번째 축 주위에 큰 따옴표가 필요하지 않습니다. 모든 것이 이미 큰 따옴표로 묶여 있기 때문에 $i 두 번째 따옴표는 필요하지 않습니다. 다음

변경을 :로 위에서 말했다

for i in {1..20} 
do 
    curl "something $i ........ -d 'something $i something'" 
done