
grep과 같은 스크린 인쇄를 처리하는 스크립트를 원합니다.
다음과 같이 실행할 수 있습니다. cat file.txt 내 스크립트
아래 스크립트를 시도했지만 아무것도 인쇄되지 않았습니다.
#!/bin/bash
line=$@
echo $line
답변1
@glemco의 답변과 같은 생각이지만 이 버전은 특수 문자(NULL 바이트 제외)에 대해 안전해야 합니다.
#!/bin/bash
while IFS= read -r line
do
printf '%s\n' "$line"
done
IFS=
선행 및 후행 공백이 잘리는 것을 방지하는 것입니다.-r
백슬래시 이스케이프 처리를 방지하는 데 사용됩니다."
주변 따옴표는"$line"
전역 확장을 방지하고 공백 시퀀스가 단일 공백으로 대체되는 것을 방지하기 위한 것입니다.
답변2
명령줄 인수( )에서 읽으려고 하는 $@
반면, 에서 읽어야 합니다 stdin
. 기본적으로 파이프는 첫 번째 명령을 stdout
두 번째 명령에 추가합니다 stdin
. Bash에서 원하는 작업을 수행하는 쉬운 방법은 read
예제에 표시된 대로 내장 명령을 한 줄씩 사용하는 것입니다.
#!/bin/bash
while read line
do
echo $line
done
물론 에코 없이 원하는 것은 무엇이든 할 수 있습니다.