Bash에서는 파이프에서 3개의 문자를 읽으려면 다음을 수행합니다.
... | read -n3
존재하다지쉬의read
, 가장 가까운 옵션은 다음과 같습니다 -k
.
-k
[일련번호]
하나만 읽으십시오(또는일련번호) 수치. 모두 첫 번째에 할당됨 이름, 분사가 필요하지 않습니다. 이 플래그는-q
존재하는 경우 무시됩니다.-u
또는 중 하나가 없으면 터미널에서 입력을 읽습니다-p
. 이 옵션은 zle 위젯에서도 사용할 수 있습니다.
MULTIBYTE
니모닉 "키"에도 불구하고 이 옵션은 전체 문자를 읽으며 옵션이 설정된 경우 여러 바이트를 포함할 수 있습니다.
및 :-u
-p
-u
N
파일 설명자에서 입력 읽기N.
-p
입력은 코프로세스에서 읽혀집니다.
Naked가 echo foobar | (read -k3; echo $REPLY)
입력을 기다리는 중입니다. -p
display 에서는 실패합니다
read: -p: no coprocess
. 다음만 작동합니다.
echo foobar | (read -k3 -u0; echo $REPLY)
bash보다 zsh에서 구현하기가 더 어려운 것을 본 것은 이번이 처음입니다.
표준 입력(무엇이든)에서 N 문자를 읽는 것보다 더 쉬운 방법이 있습니까?
답변1
조금 이상하긴 하지만 사실이에요녹음된:
-k
[일련번호]
-u
(…) 또는 중 하나가 없으면 터미널에서 입력을 읽습니다-p
.
첫 번째 시도가 중단되는 이유는 터미널에서 읽는 중이기 때문입니다. 차단을 해제하려면 터미널에 세 글자를 입력하세요. 전체 줄이 아닌 제한된 수의 문자를 요청할 때( -k
또는 사용 -q
) 표준 입력에서 읽으려면 -u 0
명시적으로 전달해야 합니다.
echo foobar | ( read -u 0 -k 3; echo $REPLY )
답변2
서브쉘 없이도 작동합니다.
% echo foobar | read -k3 -u0; echo $REPLY
foo
% echo $ZSH_VERSION
5.5.1