Как я могу читать из стандартного ввода до тех пор, пока не появится определенный символ, как в примере:
while [[ input is not $ ]]; do
read -p ...
for ...
done
Вы можете использовать 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