de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 Lgn
Lgn
Question

Podziel łańcuch na tablicę w Bashu

W skrypcie Bash chciałbym podzielić linię na kawałki i przechowywać je w tablicy.

Linia:

Paris, France, Europe

Chciałbym mieć je w tablicy w ten sposób:

array[0] = Paris
array[1] = France
array[2] = Europe

Chciałbym użyć prostego kodu, prędkość komendy'nie ma znaczenia. Jak mogę to zrobić?

571 2012-05-14T15:15:58+00:00 3
 codeforester
codeforester
Edytowane pytanie 31. maja 2018 в 12:32
Programowanie
arrays
split
bash
Popular videos
Zamiana liczb - system dwójkowy, szesnastkowy, ósemkowy, dziesiętny
Zamiana liczb - system dwójkowy, szesnastkowy, ósemkowy, dziesiętny
8 lat temu
C++ Wyszukiwanie największej liczby w zbiorze n   liczb - Informatyka klasa VIII
C++ Wyszukiwanie największej liczby w zbiorze n liczb - Informatyka klasa VIII
1 rok temu
Hybrydowa zabudowa komina, klej i konstrukcja - remont4you
Hybrydowa zabudowa komina, klej i konstrukcja - remont4you
4 miesiące temu
[35] (C#) Ułamki w komputerze (Liczby zmiennoprzecinkowe)
[35] (C#) Ułamki w komputerze (Liczby zmiennoprzecinkowe)
4 lata temu
Dlaczego płytujemy sufit na poddaszu na dwa razy? Vlog z budowy
Dlaczego płytujemy sufit na poddaszu na dwa razy? Vlog z budowy
4 miesiące temu
KOMPUTEROWE PODRÓŻE #5 | PC z 40 WENTYLATORAMI!
KOMPUTEROWE PODRÓŻE #5 | PC z 40 WENTYLATORAMI!
4 miesiące temu
Odsłonięcie tablicy poświęconej 12  Pułkowi Ułanów Podolskich w Rzymie
Odsłonięcie tablicy poświęconej 12 Pułkowi Ułanów Podolskich w Rzymie
6 lat temu
Jak ściągnąć i założyć łańcuch I prowadnice w pile
Jak ściągnąć i założyć łańcuch I prowadnice w pile
1 rok temu
Jak zrobić deskowanie dachu. Deskowanie dachu. Deskowanie więźby dachowej
Jak zrobić deskowanie dachu. Deskowanie dachu. Deskowanie więźby dachowej
4 miesiące temu
How to put chains on a truck tire - Łańcuchy na koła trucka
How to put chains on a truck tire - Łańcuchy na koła trucka
11 lat temu
[PL] Tutorial porządnego pisania skryptów bash - #1 Wstęp, dobre praktyki i przydatne narzędzie
[PL] Tutorial porządnego pisania skryptów bash - #1 Wstęp, dobre praktyki i przydatne narzędzie
2 lata temu
Spawanie prowadnic  do ściągania betonu na stropie Teriva.A komu to potrzebne.#Zbudowy
Spawanie prowadnic do ściągania betonu na stropie Teriva.A komu to potrzebne.#Zbudowy
4 miesiące temu
[BASH#1] - echo, read i prosty skrypt.
[BASH#1] - echo, read i prosty skrypt.
2 lata temu
Łańcuch tuż obok liczby w trakcie wyświetlania - P10
Łańcuch tuż obok liczby w trakcie wyświetlania - P10
5 lat temu
Bash - Lekcja 5 - pętla for, while, until, select
Bash - Lekcja 5 - pętla for, while, until, select
4 lata temu
« Poprzedni
Następny »
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Solution / Answer
Paused  until further notice.
Paused until further notice.
14. maja 2012 в 3:16
2012-05-14T15:16:48+00:00
Więcej
Źródło
Edytuj
#16183614
IFS=', ' read -r -a array <<< "$string"

Zauważ, że znaki w $IFS traktowane są indywidualnie jako separatory, tak że w tym przypadku pola mogą być oddzielone albo przecinkiem albo spacją, a nie sekwencją tych dwóch znaków. Co ciekawe, puste pola nie są tworzone, gdy w danych wejściowych pojawi się przecinek, ponieważ spacja jest traktowana specjalnie.

Aby uzyskać dostęp do pojedynczego elementu:

echo "${array[0]}"

Aby wykonać iterację po elementach:

for element in "${array[@]}"
do
    echo "$element"
done

Aby uzyskać zarówno indeks, jak i wartość:

for index in "${!array[@]}"
do
    echo "$index ${array[index]}"
done

Ostatni przykład jest przydatny, ponieważ tablice Bash są rzadkie. Innymi słowy, możesz usunąć element lub dodać element, a wtedy indeksy nie są przyległe.

unset "array[1]"
array[42]=Earth

Aby uzyskać liczbę elementów w tablicy:

echo "${#array[@]}"

Jak wspomniano powyżej, tablice mogą być niekompletne, więc nie powinieneś używać długości do uzyskania ostatniego elementu. Oto jak można to zrobić w Bashu 4.2 i nowszych:

echo "${array[-1]}"

w dowolnej wersji Basha (od gdzieś po 2.05b):

echo "${array[@]: -1:1}"

Większe ujemne przesunięcia wybierają dalej od końca tablicy. Zwróć uwagę na spację przed znakiem minus w starszej formie. Jest ona wymagana.

Paused  until further notice.
Paused until further notice.
Edytowana odpowiedź 19. grudnia 2018 в 2:55
993
0
Jim Ho
Jim Ho
14. marca 2013 в 2:20
2013-03-14T02:20:13+00:00
Więcej
Źródło
Edytuj
#16183618

Oto sposób bez ustawiania IFS:

string="1:2:3:4:5"
set -f                      # avoid globbing (expansion of *).
array=(${string//:/ })
for i in "${!array[@]}"
do
    echo "$i=>${array[i]}"
done

Pomysł polega na użyciu zastępowania ciągów:

${string//substring/replacement}

aby zastąpić wszystkie dopasowania $substring białą spacją, a następnie użyć podstawionego łańcucha do zainicjalizowania tablicy:

(element1 element2 ... elementN)

Uwaga: ta odpowiedź korzysta z operatora split+glob. Tak więc, aby zapobiec ekspansji niektórych znaków (takich jak *), dobrym pomysłem jest wstrzymanie globbingu dla tego skryptu.

 Community
Community
Edytowana odpowiedź 13. kwietnia 2017 в 12:36
Expansion of a shell variable and effect of glob and split on it - Unix &amp; Linux Stack Exchange
This post actually contains two separate questions but I think grouping them together will give some more context. I have gone through this question on quotes around variables but I do not quite
unix.stackexchange.com
212
0
Luca Borrione
Luca Borrione
2. listopada 2012 в 1:44
2012-11-02T13:44:37+00:00
Więcej
Źródło
Edytuj
#16183616

Czasami zdarzało mi się, że metoda opisana w zaakceptowanej odpowiedzi nie działała, zwłaszcza jeśli separatorem był powrót karetki; W takich przypadkach rozwiązywałem to w ten sposób:

string='first line
second line
third line'

oldIFS="$IFS"
IFS='
'
IFS=${IFS:0:1} # this is useful to format your code with tabs
lines=( $string )
IFS="$oldIFS"

for line in "${lines[@]}"
    do
        echo "--> $line"
done
29
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
Jasur Fozilov
Zarejestrowany 9 godzin temu
2
Zuxriddin Muydinov
Zarejestrowany 1 dzień temu
3
Денис Анненский
Zarejestrowany 3 dni temu
4
365
Zarejestrowany 1 tydzień temu
5
True Image
Zarejestrowany 1 tydzień temu
BG
DA
DE
EL
ES
ET
FR
ID
IT
JA
KO
LT
LV
NL
PL
PT
RU
SL
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem