Considerando:
- https://linuxcommand.org/lc3_man_pages/readh.html
- https://man7.org/linux/man-pages/man2/read.2.html
- https://git.savannah.gnu.org/cgit/coreutils.git/tree/src
- https://stackoverflow.com/a/60869467/15603477
cat filename | while read i
do
echo $i
done
todas as outras respostas falharam, esta funciona! este cortará o arquivo de texto linha por linha.
Eu quero saber mais sobre a parte chave lida . Mas não consigo encontrar o código-fonte.
which read
sem saída. o que é "ler" neste contexto?
Na verdade não. O
read
irá analisar a linha e reconstruí-la de acordo com as regras do shell. Por exemplo,O capturado
$x
não tem espaço inicial nem final:(Altere
read x
eIFS= read -r x
compare o resultado.) Além disso, ao não colocar aspas duplas na variável$x
ao usá-la, ela estará sujeita a processamento adicional. Por exemplo,No seu caso, os arquivos
a
,b
,c
também serão complementados pelo conjunto de arquivos que você possui em seu diretório atual. (Devo salientar quetouch
apenas cria arquivos vazios como efeito colateral; se os arquivos já existirem, ele simplesmente atualizará o horário da última modificação para agora e definitivamente não os truncará ou recriará.)Depois de tudo isso, você não poderá usar o valor de
$x
fora do loop, pois o loop está em um subshell. (Definax='demo'
antes do início do loop e depoisecho "$x"
que o loop terminar. Ele não será afetado pelo loop.) Você não precisa decat
neste caso, pois há apenas um arquivo:Mas mesmo depois de tudo isso, normalmente há pouca necessidade de repetir a entrada como esta, já que muitas ferramentas processam arquivos linha por linha de qualquer maneira. cf
Este é o
read
comando interno do shell, que é especificado por POSIX . A implementação do Bash é descrita no manual do Bash , e seu código fonte faz parte do repositório do Bash .