Eu tenho uma variável:
❯ echo $numholds
409503
409929
409930
409932
409934
409936
409941
409942
409944
409946
Eu quero fazer um loop for, mas a delimitação de nova linha não funciona:
❯ for num in $numholds; do
echo $num ,
echo New Item!
> done
409503
409929
409930
409932
409934
409936
409941
409942
409944
409946 ,
New Item!
Isso até acontece quando eu configuro IFS=$"\n \t"
. Como posso fazer isso funcionar?
Para dividir em nova linha em zsh, você usa o
f
sinalizador de expansão de parâmetro (f
para linhaf
eed ) que é a abreviação deps:\n:
:Você também pode usar
$IFS
-splitting quezsh
(ao contrário de outros shells do tipo Bourne) você deve solicitar explicitamente a expansão de parâmetros usando a$=param
sintaxe ($=
parece um pouco como uma tesoura):Sua variável é uma string, não um array. O fato de conter novas linhas não é relevante. Você
for num in $numholds
vê a coisa toda como um único valor, pois é assim que você o armazena.A solução simples seria usar um
while
loop e a<<<
construção here-string para alimentá-lo:Isso é essencialmente equivalente ao mais feio (veja aqui por que isso é uma má ideia):
Finalmente, você pode querer transformar a variável em um array:
Agora você pode usar a construção desejada: