
안녕하세요. 저는 제 파일을 읽는 스크립트를 작성하려고 합니다. 필요한 모든 변수를 가져와서 다른 명령에 사용하려고 합니다. 하지만 스크립트를 실행하는 대신 printf를 시도했는데 빈 출력이 나왔기 때문에 변수가 기억되지 않는 것 같습니다.
여기 내 코드가 있습니다
#!/bin/bash
numparams=$#
params=$*
cat tots.txt | while read;
do awk '{
regid=$1;
uport=$2;
ongoingcalls=$3;
ingeg=$4;
maxcalls=$5;
if($3<$5) state=0
if($3==$5) state=1
if($3>$5) state=2
}'
/home/send_script.sh -o "$regid $uport $ongoingcalls $ingeg $maxcalls $state"
done
tots.txt 내용은 다음과 같습니다.
답변1
이는 이라고 말하여 여는 서브셸에 변수가 설정되기 때문입니다 cat <file> | while ...
. 따라서 이 서브셸이 완료되면 해당 변수에 더 이상 액세스할 수 없습니다.
대신 다음과 같이 말하세요.
while read; do
...
done < tots.txt
흥미로운 독서:파이프라인에 있는 루프에 변수를 설정했습니다. 루프가 종료된 후에 사라지는 이유는 무엇입니까? 아니면 읽을 데이터를 파이프할 수 없는 이유는 무엇입니까?.
awk
또한 변수 와 변수 사이에 혼동이 있는 것 같습니다 shell
. 설정한 내용은 awk
그대로 유지되므로 awk의 변수는 ( 열 번호를 참조함 ) awk '{$var=2}'
없이 설정되고 var는 쉘 범위 내에 있으며 쉘에서 사용할 수 없습니다.$
$var
var
awk
어쩌면 다음과 같은 작업을 수행하고 싶을 수도 있습니다.
results=($(awk 'BEGIN {print 1,2,3,"a"}'))
results[]
나중에 액세스할 수 있는 배열을 생성합니다 .