2013-10-11 4 views
1

을 나오지 출력을 전달합니다배쉬 수학은

for i in {1989..2009..1} 
do 
let year=i-1 
echo $year 
find /cygdrive/d/snowmodel/$i/snowmodel.par -type f -exec \ 
sed -i 's/iyear_init = 1989/iyear_init = '$year'/g' {} + 
done 

을 그래서 선을 대체 할 iyear_init = 1989 줄은 iyear_init = (the value of i-1, which should be the variable "year")입니다.

echo $year 명령은 올바른 값을 반환하지만 sed로 전달되면 문자열처럼 치료 연도로 되돌아가는 것으로 보입니다.

도움 주셔서 감사합니다.

+1

가 나오지 -I, 큰 따옴표로 나오지 명령을 넣어 "S/$ {I} 년 ..." – Dru

+0

확인은 답을 발견 유래 관련 질문을 제시 한 후 (내 검색 쿼리가 weren 히 생각 ' t는 매우 잘 말했습니다.) 작은 따옴표 안에있는 변수가 sed에서 바뀌지 않기 때문에 큰 따옴표를 큰 따옴표로 바꾸어야했습니다. 는 일 다음 : 을 내가 위해 {1989..2009..1} 에 이 /cygdrive/d/snowmodel_cig/cig_79/bias_runs/$i/snowmodel.par 찾을 하자 년 = 내가-1 은 $ 년 에코 할 - 유형 f-exec \ \t sed -i "s/iyear_init = i-1/iyear_init = $ year/g"{} + done –

+0

@ mr.cooper 질문을 삭제하거나 고정 코드를 대답 (그리고 그것을 받아 들인다) – SheetJS

답변

1

좋아요, stackoverflow가 제안 된 후 답변을 찾았습니다. 관련 질문 (내 검색어가 잘 잘된 것 같아요).

작은 따옴표 안에있는 변수가 sed에서 바뀌지 않기 때문에 큰 따옴표로 바꾸려면 문제가 생겼습니다. 는 일 다음 :

for i in {1989..2009..1} 
do 
let year=i-1 
echo $year 
find /cygdrive/d/snowmodel_cig/cig_79/bias_runs/$i/snowmodel.par -type f -exec \ 
sed -i "s/iyear_init = i-1/iyear_init = $year/g" {} + 
done