Poszukuję bash jednej linijki, która dołącza znak nowej linii po każdym elemencie listy. Jeśli zgłoszę skrypt jako:Jak użyć podstawiania bash do dodania nowej linii na końcu każdego elementu listy
./script arg1 arg2 arg3
Chcę wyjście być
arg1
arg2
arg3
Próbowałem różnych odmian poniżej. Nowa linia nie zostanie dodana. Dodawany jest zwykły char.
# pretty much works except for an extra space
list=${@/%/x}
echo "$list"
# appends 'n'
list=${@/%/\n}
echo "$list"
# appends nothing
list=${@/%/$'\n'}
echo "$list"
# appends nothing, \x078 would append 'x'
list=${@/%/$'\x0D'}
echo "$list"
# appends nothing
CR=$'\n'
list=${@/%/$CR}
echo "$list"
# same issues with arrays
tmp=([email protected])
list=${tmp/%/\n}
echo "$list"
Jaką poprawkę lub alternatywę sugerujesz? Oczywiście mogłem napisać pętlę lub zadzwonić, ale dokładnie to, co myślałem, że mogę uniknąć dzięki substytucji bash.
Dlaczego starasz się uniknąć pętli? Może to niepotrzebnie skomplikować kod. Zasadniczo nie staraj się być tak sprytny, jak to możliwe i zachować rzeczy proste - https://en.wikipedia.org/wiki/KISS_principle. –
Bo chcę skorzystać z ekspresji językowej. KISS jest dobry do unikania niepotrzebnej złożoności. Jaka jest złożoność ponownego formatowania listy argumentów? –
Jeśli chodzi o _appends nothing part_: use quotes: 'list =" $ {@ /%/$ '\ n'} "; echo "lista $" '. –