@ Ответ Netcoder хорош, эта оптимизация устраняет ложные пустые строки, а также позволяет последней строке не иметь новой строки, если так было в оригинале.
DONE=false
NL=
until $DONE ;do
if ! read ; then DONE=true ; NL='-n ';fi
echo $NL$REPLY
done
Я использовал вариант этого, чтобы создать 2 функции, позволяющие передавать по тексту текст, который включает '[', чтобы сохранить радость grep. (Вы можете добавить другие переводы)
function grepfix(){
local x="$@";
if [[ "$x" == '-' ]]; then
local DONE=false
local xx=
until $DONE ;do
if ! IFS= read ; then DONE=true ; xx="-n "; fi
echo ${xx}${REPLY//\[/\\\[}
done
else
echo "${x//\[/\\\[}"
fi
}
function grepunfix(){
local x="$@";
if [[ "$x" == '-' ]]; then
local DONE=false
local xx=
until $DONE ;do
if ! IFS= read ; then DONE=true ; xx="-n "; fi
echo ${xx}${REPLY//\\\[/\[}
done
else
echo "${x//\\\[/\[}"
fi
}
(передача - поскольку $ 1 включает pipe, в противном случае просто переводит аргументы)