Я хочу написать скрипт, который перебирает 15 строк (возможно, массив?) Это возможно?
Что-то вроде:
for databaseName in listOfNames
then
# Do something
end
Вы можете использовать это так:
## declare an array variable
declare -a arr=("element1" "element2" "element3")
## now loop through the above array
for i in "${arr[@]}"
do
echo "$i"
# or do whatever with individual element of the array
done
# You can access them using echo "${arr[0]}", "${arr[1]}" also
Также работает для объявления многострочного массива
declare -a arr=("element1"
"element2" "element3"
"element4"
)
Это возможно, конечно.
for databaseName in a b c d e f; do
# do something like: echo $databaseName
done
Смотрите Bash Loops для, пока и для деталей.
for year in $(seq 2000 2013)
.DATABASES="a b c d e f"
.Ни один из этих ответов не включает счетчик ...
Вывод:
источник
echo "$i / ${arraylength} : ${array[$i-1]}"
- иначе, если ваш$i
содержит глобус, он будет расширен, если он содержит вкладку, он будет изменен на пространство и т. д.да
Вывод:
Сохранить пространство; записи списка с одинарными или двойными кавычками и расширения списка с двойными кавычками.
Вывод:
Составить список из нескольких строк
Вывод:
Простая переменная списка
или
Показать переменную списка:
Вывод:
Перебрать список:
Вывод:
Создайте функцию для просмотра списка:
Используя ключевое слово Declare (команда) для создания списка, который технически называется массивом:
Вывод:
Создание ассоциативного массива. Словарь:
Вывод:
Переменные или файлы CVS в списке .
Изменение внутреннего разделителя полей из пробела на то, что вы хотите.
В приведенном ниже примере она заменяется запятой
Вывод:
Если нужно их нумеровать:
это называется обратный тик. Поместите команду в тики назад.
Он находится рядом с номером один на вашей клавиатуре и / или над клавишей табуляции. На стандартной клавиатуре американского английского языка.
Выход:
Познакомьтесь с поведением Баси:
Создать список в файле
Прочитайте файл списка в список и отобразите
Справочное руководство по командной строке BASH: специальное значение определенных символов или слов для оболочки.
источник
"${List[@]}"
правильно, с кавычками .${List[@]}
неправильно.${List[*]}
неправильно. ПопробуйтеList=( "* first item *" "* second item *" )
- вы получите правильное поведениеfor item in "${List[@]}"; do echo "$item"; done
, но не от любого другого варианта.List=( "first item" "second item" )
будет разбитfirst
,item
,second
,item
а).ls
результатов, что противоречит передовому опыту .В том же духе, что и 4-й ответ:
Б. Нет пробелов в именах:
Ноты
listOfNames="RA RB R C RD"
имеет тот же результат.Другие способы ввода данных включают в себя:
Читать со стандартного ввода
IFS='\n'
, или для MacOSIFS='\r'
)#!/bin/bash
в верхней части файла сценария указывается среда выполнения.Другие источники ( во время чтения цикла )
источник
IFS
. (Для всех,IFS
давайте зададим определенный разделитель, который позволяет другим пробелам включаться в строки без разделения на подстроки).$databaseName
просто содержит весь список, таким образом, делает только одну итерацию.Вы можете использовать синтаксис
${arrayName[@]}
источник
Удивило, что никто еще не опубликовал это - если вам нужны индексы элементов во время цикла по массиву, вы можете сделать это:
Вывод:
Я нахожу это намного более элегантным, чем "традиционный" стиль цикла (
for (( i=0; i<${#arr[@]}; i++ ))
).(
${!arr[@]}
и$i
не нужно указывать в кавычках, потому что это просто цифры; некоторые в любом случае предлагают их цитировать, но это всего лишь личные предпочтения.)источник
Это также легко читать:
источник
IFS=$'\n'
это может работать и для других решений в этом сценарии.Неявный массив для скрипта или функций:
В дополнение к правильному ответу Анубхавы : Если основной синтаксис для цикла:
есть особый случай вудар:
При выполнении сценария или функции, аргументы , передаваемые в командной строке будет присвоено
$@
переменной массива, вы можете получить доступ с помощью$1
,$2
,$3
и так далее.Это может быть заполнено (для теста)
Петля над этим массивом можно было бы написать просто:
Обратите внимание, что зарезервированной работы
in
нет и имени массива тоже нет!Образец:
Обратите внимание, что это то же самое, что
Затем в сценарий :
Сохранить в скрипте
myscript.sh
,chmod +x myscript.sh
, тоТо же самое в функции :
затем
источник
или просто
источник
Простой способ :
источник
Объявляемый массив не работает для оболочки Korn. Используйте приведенный ниже пример для оболочки Korn:
источник
for i in ${foo[*]}
в принципе всегда неправильная вещь -for i in "${foo[@]}"
это форма, которая сохраняет границы исходного списка и предотвращает расширение глобуса. И эхо должно бытьecho "$i"
Это похоже на ответ пользователя 2533809, но каждый файл будет выполняться как отдельная команда.
источник
Если вы используете оболочку Korn, есть « set -A databaseName », в противном случае есть « объявить -a databaseName »
Чтобы написать сценарий, работающий на всех оболочках,
Надо работать на всех снарядах.
источник
$ bash --version
GNU bash, версия 4.3.33 (0) -релиз (amd64-portbld-freebsd10.0)$ set -A databaseName=("db1" "db2" ....) || declare -a databaseName=("db1" "db2" ....)
bash: синтаксическая ошибка рядом с неожиданным токеном `('Попробуй это. Это работает и проверено.
источник
array=( "hello world" )
илиarrray=( "*" )
; в первом случае он напечатаетhello
иworld
отдельно, во втором он напечатает список файлов вместо*
Возможная первая строка каждого скрипта / сессии Bash:
Используйте, например:
Может рассмотреть:
echo
интерпретирует-e
как вариант здесьисточник
Однолинейный цикл,
вы получите такой вывод,
источник
Что мне действительно нужно для этого было что-то вроде этого:
Например:
(Убил бы все процессы с vlc в их имени)
источник
Я перебираю массив моих проектов для
git pull
обновления:источник