Для большего разнообразия cut
иgrep
:
getent passwd | cut -d: -f1 | grep -Ex '.{5,10}'
Это извлекает записи пароля, вырезает первое поле (имя пользователя ), затем запрашивает у grep совпадение расширенного регулярного выражения, которое охватывает всю строку (-x
), где есть от 5 до 10 любых символов (.
).
Согласно ожидаемому результату,
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
Переменная 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