Подобно на повечето езици за програмиране, bash скриптовете понякога трябва да се справят със списък със свързани стойности. Най-простата форма е стандартният масив.
В bash програмирането на масиви е доста различно, особено що се отнася до синтаксиса. Bash масивите също са строго едномерни, но все още имат много приложения.
Основният синтаксис на Bash масивите
Създаването на масив в bash е лесно. Можете да инициализирате цял масив с помощта на скоби, например:
city=(Лондон Париж Милано "Ню Йорк")
(Можете да намерите целия код от този пример за град в този GitHub Gist.)
Това създава масив, съдържащ четири елемента, индексирани от 0 до 3. Имайте предвид, че четвъртата стойност е низ в кавички, състоящ се от две думи. Ще трябва да цитирате стойности, съдържащи интервали, за да изясните, че те не са отделни стойности.
Можете да получите достъп до един елемент, като използвате синтаксиса на скоби, който е общ за езиците за програмиране:
град[2]
Тъй като това е bash, ще ви трябват няколко уточнения, за да използвате действително стойността в израз:
- Ще трябва да поставите преди знака на долара ($) към името на променливата.
- Вие също ще трябва да използвате скоби ({}), за да направите името на променливата недвусмислено. По подразбиране bash ще третира $city[2] като променлива с име град. Добавете скоби, за да кажете на bash също да оцени скобите и индексния номер.
Тогава стандартният синтаксис за достъп до bash масив е:
${variable_name[index]}
Ето пълен пример:
#!/bin/bash
city=(Лондон Париж Милано "Ню Йорк")
ехо ${city[3]}
# Ню Йорк
Вместо да инициализирате масив наведнъж, можете да му присвоите стъпка по стъпка. Този скрипт е по-дълъг еквивалент на предишния пример:
#!/bin/bash
град[0]=Лондон
град[1]=Париж
град[2]=Милано
град[3]="Ню Йорк"
ехо ${city[3]}
# Ню Йорк
Имайте предвид, че и в двата случая трябва да внимавате да не добавяте интервал около знака за равенство. „city[0] = London“, с интервали около знака за равенство, ще генерира грешка.
Още приложения за Bash масиви
Масивите са идеални за съхранение на свързани данни. Ето (много ограничен) шел скрипт за получаване на корен квадратен от число:
#!/bin/bash
sqrt[1]=1
sqrt[4]=2
sqrt[9]=3
sqrt[16]=4
sqrt[25]=5
ехо ${sqrt[$1]}
Имайте предвид, че скриптът използва стойността $1 като индекс на масива. $1 представлява първия аргумент от командния ред, който скриптът получава, така че можете да стартирате този скрипт така:
$ ./sqrt.sh 9
3
Може да сте наясно с $(cmd) синтаксис за изпълнение на команда и запазване на нейния изход в променлива. Можете да комбинирате това със синтаксиса за инициализация на масива, за да получите масив от файлове, с които да работите:
arr=( $(ls) )
Масивът е често перфектна структура от данни за повторение и Bash не е изключение. Можете да преминете през масив, за да отпечатате всеки елемент или да извършите операция върху всеки член.
Можете да адресирате масив в а за.. в цикъл, за да преглеждате съдържанието му. Например, ето прост цикъл, който отпечатва броя на редовете във всеки файл в масива обр:
за файл в "${arr[@]}"; направи
wc -l "$ файл"
Свършен
# 3 envvars
# 547 httpd.conf
# ...
Имайте предвид, че този модел използва @ символ за извличане на всички елементи от масива.
Още синтаксис на Bash масив
Можете да получите броя на елементите в масив, като използвате следното:
ехо ${#city[@]}
# 4
Можете да добавите нов елемент в края на стандартен масив по следния начин:
arr+=(4)
И така, за да добавите пети град към списъка:
град+=(Рим)
ехо ${city[@]}
# Лондон Париж Милан Ню Йорк Рим
За да извлечете част от масив, можете да използвате синтаксис, който приближава операцията на срез на много други езици:
${arr[@]:s: n}
Този синтаксис ще върне част от масива, започващ от позиция с и съдържащи н артикули. Можете да пропуснете :н част, от която да извлечете всички елементи с до края на списъка.
ехо ${city[@]:2:2}
# Милан Ню Йорк
ехо ${city[@]:3}
# Ню Йорк Рим
Bash има много функции, те просто изискват малко обучение
Масивите в bash може да имат ограничения, но предлагат същата основна функционалност, както повечето езици за програмиране. Въпреки че bash исторически поддържа само обикновени едномерни масиви, времената се променят. Най-новата версия на bash, 4, поддържа асоциативни масиви и отрицателно индексиране на масиви.
Която и версия на bash да използвате, важно е да разберете нейните нюанси. Дори нормалният синтаксис на променливите има много идиосинкразии.
Обяснение на променливите в Bash: Просто ръководство с примери
Прочетете Следващото
Свързани теми
- Програмиране
- Linux
- Програмиране
- Linux Bash Shell
- Скриптиране
За автора
Боби е технологичен ентусиаст, който е работил като разработчик на софтуер през повечето от две десетилетия. В MUO той е младши редактор на секцията за програмиране. Той е запален по игрите, работи като главен редактор в Switch Player Magazine и е потопен във всички аспекти на онлайн публикуването и уеб разработката.
Абонирайте се за нашия бюлетин
Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!
Щракнете тук, за да се абонирате