Jak mogę odczytać dane wejściowe użytkownika jako tablicę w bash
powłoce?
command-line
bash
moata_u
źródło
źródło
cat war_and_peace.txt | ./array_test.sh
../array_test.sh < war_and_peace.txt
.Odpowiedzi:
Oto jeden ze sposobów, aby to zrobić:
Jeśli go po prostu uruchomisz, będzie kontynuował czytanie ze standardowego wejścia, dopóki nie naciśniesz Ctrl + D (EOF). Następnie wprowadzone linie będą w
my_array
. Niektórzy mogą uznać ten kod za mylący. Ciało pętli w zasadzie mówimy_array = my_array + element
.Kilka interesujących dokumentów:
Przewodnik Advanced Bash-Scripting ma świetny rozdział na temat tablic
Manpage z odczytu wbudowanego polecenia
15 przykładów tablic z thegeekstuff.com
źródło
read -r
jest czasem bardzo przydatny / ważny ... Link Stefano do „przeczytanej wbudowanej strony man” wyjaśnia jej cel ... (zapobieganie interpretacji odwrotnego ukośnika).Przeczytaj to za pomocą tego:
Do drukowania użyj:
źródło
I taki, który nie odtwarza tablicy za każdym razem (choć wymaga bash 3.1 lub nowszej wersji):
Więcej informacji można znaleźć na stronie http://mywiki.wooledge.org/BashFAQ/001 .
I jak zawsze, aby uniknąć pisania błędów, przeczytaj http://mywiki.wooledge.org/BashGuide i unikaj przewodników tldp, takich jak Przewodnik zaawansowanego skryptu bash.
źródło
IFS
problem. Bez zerowania, „czytaj” kopiuje wszystkie wiodące i końcowe białe znaki ... i oczywiście-r
też ...Co powiesz na ten jednowarstwowy;)
Edytować:
w
bash
,to sposób przypisywania do tablicy . Używając go w połączeniu z zastępowaniem poleceń, możesz czytać tablice z potoku, których nie można użyć
read
do osiągnięcia tego w prosty sposób:Przekonasz się, że nie wyprowadza nic ze względu na fakt, że
read
nic nie robi, gdystdin
jest potokiem, ponieważ potok może być uruchamiany w podpowłoce, dzięki czemu zmienna może w ogóle nie być użyteczna.Korzystając ze sposobu sugerowanego przez tę odpowiedź:
Daje
a b
to, co jest o wiele prostsze i bardziej bezpośrednie niż jakiekolwiek obejście podane przez odpowiedzi Read wartości do zmiennej powłoki z potoku i w skrócie odczytane po tym, jak potok nie ustawia wartości .źródło