한 가지 방법으로 작성하면 변수를 설정할 수 있지만 다른 방법으로 작성하면 변수를 설정할 수 없는 while 루프가 있습니다. 왜 그런 겁니까? var를 1234로 인쇄하고 var2는 인쇄하지 않습니다.
#!/bin/bash
var=1234
while var=9876 var2=765 read line
do
echo $var $var2
echo $line
done <datafile
echo out of loop $var
var를 9876으로 인쇄하고 var2를 인쇄합니다.
#!/bin/bash
var=1234
while
var=9876
var2=765
read line
do
echo $var $var2
echo $line
done <datafile
echo out of loop $var
답변1
두 번째 예에서는 var와 var2를 서로 다른 줄에 배치하여 명령을 다음과 동일하게 만듭니다.
while var=9876; var2=765; read line
이 while
명령을 사용하면 do-while 루프에서 명령을 실행하기 전에 명령 목록을 표시할 수 있습니다. help while
이것을 보여주세요:
while: 동시에 명령을 실행합니다. done
테스트가 성공하는 동안 명령을 실행합니다. COMMANDS 는 'while' COMMANDS의 마지막 명령 종료 상태가 0인
동안 확장되어 실행됩니다. 종료 상태: 마지막으로 실행된 명령의 상태를 반환합니다.
반면에 변수 할당이 명령 앞에 있고(이 경우 read
) 할당 뒤에 공백만 있는 경우 변수의 범위는 명령의 로컬 범위뿐입니다! (내부)...
답변2
나는 bash가 이런 일을 할 수 있다는 것을 몰랐습니다. 게시해 주셔서 감사합니다.
이것이 나의 설명이다.
첫 번째 스크립트의 다음 줄은 다음과 같습니다.
while var=9876 var2=765 read line
실제로 "var"라는 환경 변수를 "9876" 값으로 설정하고 "var2"라는 다른 환경 변수를 "765" 값으로 설정합니다.그러나 명령에만 해당read line
. 이것은 이상한 오래된 쉘 "기능"입니다. 이것이 echo $var $var2
바로 줄이 "1234"를 인쇄하는 이유입니다. "var"라는 이름의 환경 변수는 read line
.
두 번째 스크립트에서는 변수 할당이 read line
서로 다른 줄에서 발생하는데, 루프를 통해 매번 "var" 및 "var2"라는 쉘 변수가 할당되는 것 같습니다.