문맥: read -u에서 전용 fd를 사용하여 파일의 각 줄에 대한 명령줄을 실행합니다.
관련된:https://stackoverflow.com/a/13941223/15603477
while read -u 7 filename;do
ans=
while [ -z "$ans" ]; do
read -p "Process file '$filename' (y/n)? " -sn1 foo
[ "$foo" ] && [ -z "${foo/[yn]}" ] && ans=$foo || echo '??'
done
if [ "$ans" = "y" ]; then
echo Yes
echo "Processing '$filename'."
else
echo No
fi
done 7<file.txt
난 이해가 안 돼요하다막힘:
do
read -p "Process file '$filename' (y/n)? " -sn1 foo
[ "$foo" ] && [ -z "${foo/[yn]}" ] && ans=$foo || echo '??'
done
나는 구글을 검색했다SN1, 좋은 결과는 없는 것 같습니다.-지찾기도 쉽지 않습니다.
알아요;
"&&"는 이전 명령이 오류 없이 종료되는 경우(더 정확하게는 반환 코드 0으로 종료되는 경우)에만 다음 명령이 실행되도록 명령을 함께 연결하는 데 사용됩니다.
${parameter/pattern/string} 패턴은 파일 이름 확장과 마찬가지로 패턴을 생성하기 위해 확장됩니다. 매개변수가 확장되고 패턴과 해당 값과 가장 오랫동안 일치하는 항목이 문자열로 대체됩니다.
하지만 여기는${foo/[yn]}대체 문자열이 없습니다.
답변1
읽다man bash
read
-s
무음 모드. 입력이 터미널에서 오는 경우 문자는 에코되지 않습니다.
-n nchars
read
읽으신 후 반납하세요 nchars 문자 전체 입력 줄을 기다리는 대신 nchars보다 구분 기호 앞에서 읽은 문자 수가 적은 경우 구분 기호를 따릅니다.
이 코드는 read -p "Process file '$filename' (y/n)? " -sn1 foo
프롬프트를 인쇄하고 입력 내용을 에코하지 않고 개별 문자를 읽습니다.
-z string
문자열 길이가 0이면 참입니다.
${parameter/pattern/string}
... 만약에끈비어 있음, 일치함무늬이 제거되며/
다음 패턴은 생략될 수 있습니다.
암호[ "$foo" ]&& [ -z "${foo/[yn]}" ]&& ans=$foo || echo '??'
foo가 그 중 하나인지 확인하고 y
, n
그렇지 않으면 '??'를 인쇄합니다.