Shell 스 크 립 트 가 텍스트 파일 을 한 줄 씩 읽 습 니 다(텍스트 형식 을 바 꾸 지 않 음)
$ vi testfile
ls -a -l /bin | sort
ls -a -l /bin | sort | wc
ls -a -l | grep sh | wc
ls -a -l
ls -a -l | sort | wc
가장 흔히 볼 수 있 는 line by line 에서 파일 내용 을 읽 는 예 는:
$ vi readfile
#!/bin/sh
testfile=$1
while read -r line
do
echo $line
done < $testfile
$ chmod +x readfile
$ ./readfile testfile
ls -a -l /bin | sort
ls -a -l /bin | sort | wc
ls -a -l | grep sh | wc
ls -a -l
ls -a -l | sort | wc
이 예 의 문 제 는 텍스트 줄 을 읽 은 후에 텍스트 형식 이 바 뀌 었 고 원래 testfile 파일 의 내용 과 완전히 일치 하지 않 아 빈 칸 문자 가 자동 으로 삭제 되 었 습 니 다.왜 이러 지?IFS 는 셸 script 에 IFS 가 명확 하 게 지정 되 어 있 지 않 으 면 기본적으로 빈 칸,탭,줄 바 꾸 기 등 을 나 누 기 때문에 위 텍스트 줄 에 남아 있 는 빈 칸 과 줄 바 꾸 기 가 자동 으로 들 어 갑 니 다.testfile 파일 의 원래 형식 을 출력 하려 면 줄 마다(전체 로)그대로 인쇄 하면 어떻게 합 니까?이 때 IFS 변 수 를 지정 하여 셸 에 게'줄'단위 로 읽 으 라 고 알려 야 합 니 다.
$ vi readfile
#!/bin/sh
IFS=""
testfile=$1
while read -r line
do
echo $line
done < $testfile
$ ./readfile testfile
ls -a -l /bin | sort
ls -a -l /bin | sort | wc
ls -a -l | grep sh | wc
ls -a -l
ls -a -l | sort | wc
위의 두 가지 방법의 수출 은 차이 가 많 지 않 습 니까?무슨 관계 가 있 습 니까?첫 번 째 는 좀 아름 답지 않 습 니까?관계 가 중대 합 니 다.VPSee 는 어제 셸 을 모 의 하 는 C 프로그램 을 쓴 다음 에 셸 script 을 써 서 이 C 프로그램 을 테스트 했 습 니 다.이 script 은 위의 testfile 에서 전체 줄 을 읽 어서 C 프로그램 에 전달 해 야 합 니 다.위의 두 가지 방법 에 따라 두 가지 다른 입력 형식 을 얻 을 수 있 고 의미 가 완전히 다 릅 니 다.
$./mypipe ls -a -l | sort | wc
$./mypipe "ls -a -l | sort | wc "
분명히 내 가 원 하 는 것 은 두 번 째 입력 이다.'ls-a-l|sort|wc'를 전체적으로 나 에 게 전 달 된 my pipe 로 서 나의 my pipe 가 문자열 안의 각종 명령 을 정확하게 식별 할 수 있 는 지 테스트 하 는 것 이다.IFS 를 사용 하지 않 으 면 위의 두 번 째 방법의 효 과 를 얻 을 수 있 는 방법 이 있 습 니 다.
#!/bin/sh
testfile=$1
x=`wc -l $testfile |awk '{print $1}'`
i=1
while [ $i -le $x ]
do
echo "`head -$i $testfile | tail -1`"
i=`expr $i + 1`
done
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Shell alias 명령에 별칭을 설정하는 방법명령에 별명을 설정하면 명령의'작은 이름'으로 삼을 수 있지만, 이렇게 하는 것이 무슨 의미가 있습니까? 이때 별명이 작용할 수 있다.vim 명령의 별명을vi라고 정의하면 이후에 실행된vi 명령은 실제로vim 명령을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.