데이터 파일의 일부를 추출하여 다른 파일에 저장하는 스크립트를 작성하고 싶습니다. 스크립트를 작성했지만 일부 오류가 발생합니다. 스크립트는
#!/bin/bash
nn=0
mn=0
for var1 in 1 2 3 ; do
nn=nn+2
mn=mn+302
sed -n '$nn','$mn'p dos.dat > $var1.dat
nn=mn
done
답변1
스크립트의 즉각적인 문제는 변수가 작은따옴표로 묶여 있어 셸에서 확장할 수 없다는 것입니다.
sed -n '$nn','$mn'p dos.dat > $var1.dat
어쩌면 당신은 이것을 의미하는 것 같습니다
sed -n "$nn,${mn}p" dos.dat > $var1.dat
두 번째 변수가 {
및 로 구분되는 경우 }
이를 및 와 구분하세요 p
.
또한 표현식 구문도 문제입니다. "=" 오른쪽에 있는 변수의 값을 얻으려면 "$"가 필요합니다. '$(('를 사용하지 않거나 이를 처리하지 않으면 expr
오른쪽은 숫자가 아닌 문자열일 뿐입니다.
어쩌면 다음과 같은 뜻일 수도 있습니다.
#!/bin/bash
nn=0 ; mn=0
for var1 in 1 2 3 ; do
nn=$(($nn+2))
mn=$(($mn+302))
sed -n "$nn,${mn}p" dos.dat > $var1.dat
nn=$mn
done
~에 따르면POSIX, 여기서 '$' $((
는 필요하지 않습니다. 다음 중 하나를 수행합니다.
쉘 변수인 경우
x
선택적으로 앞의 더하기 또는 빼기 기호를 포함하고 그 뒤에 산술 확장이 오는 유효한 정수 상수를 형성하는 값을 포함합니다."$((x))"
그리고"$(($x))"
동일한 값을 반환해야 합니다.