Передача массивов в функцию в сценарии bash

Для большего разнообразия cutиgrep:

getent passwd | cut -d: -f1 | grep -Ex '.{5,10}'

Это извлекает записи пароля, вырезает первое поле (имя пользователя ), затем запрашивает у grep совпадение расширенного регулярного выражения, которое охватывает всю строку (-x), где есть от 5 до 10 любых символов (.).

1
22.05.2020, 14:12
2 ответа

Согласно ожидаемому результату,

  • в этой команде echoнам не требуется «Файл обработки».
  • нам не нужно передавать значение индекса массива при его зацикливании в цикле for.

Попробуйте как

declare -a files=( "A1S0" "D1S0" "D2S0" "D3S0" "D4S0" "D5S0" "D6S0" )
command_to_get_filesizes() 
{
  for i in "${files[@]}"; do
    echo "$i"
  done
}
command_to_get_filesizes
0
18.03.2021, 23:33

Переменная index не определена. То, что вы намеревались

echo Processing file "${files[i]}"

Что делает оригинал, неясно. Все переменные являются (потенциально )массивами с нулевым элементом. (Попробуйте echo "${PATH[$junk]}". )Итак, вся конструкция "${i[${index}]}"разрешается как ${i[0]}, что просто повторяет $i.

Ваш заголовок немного вводит в заблуждение :вы не передаете массив в функцию (в качестве параметра ):это просто глобальная переменная массива.

@Siva прав в том, что вы можете просто перебирать значения массива. Однако, если вам нужны и индекс, и значение в одной итерации, это подойдет мне.

for n in "${!N[@]}"; do
    printf '%8d  %s\n' "${n}" "${N[n]}"
done
0
18.03.2021, 23:33

Теги

Похожие вопросы