[ -z "${foo/[yn] 및 [-z 표현식] bash에서 무엇을 의미합니까?

[ -z "${foo/[yn] 및 [-z 표현식] bash에서 무엇을 의미합니까?

문맥: 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그렇지 않으면 '??'를 인쇄합니다.

관련 정보