Как принимать данные от пользователя, пока не появится определенный символ

Как я могу читать из стандартного ввода до тех пор, пока не появится определенный символ, как в примере:

while [[ input is not $ ]]; do
    read -p ...
    for ...
done
0
задан 14 November 2020 в 01:13

1 ответ

Вы можете использовать read с $ в качестве разделителя. read прекратит чтение из стандартного ввода, как только встретит разделитель. Для этого вам действительно не нужна петля.

#!/bin/bash

read -d $ -p 'input characters: '
[[ $? = 0 ]] && \
printf 'Jackpot! You typed: %s\n' $

С другой стороны, если вы хотите проверять символы перед выводом на экран, вы можете использовать параметр -N, чтобы указать read прерывать после чтения одного символа, где вы можете сломаться, прежде чем что-либо напечатается.

#!/bin/bash

echo -n 'input characters: '
while read -N 1 -s -r; do
    [[ $REPLY = $ ]] && \
    { printf '\njackpot! you typed: %s\n' $; break; } || printf %s "$REPLY"
done
1
ответ дан 13 November 2020 в 19:05

Другие вопросы по тегам:

Похожие вопросы: