Чтобы применить функцию к списку, вы просто перебираете его:
list=(one two 'twenty one' banana)
f() {
echo "This is f applied to '$1'"
}
for item in "${list[@]}"
do
f "$item"
done
Если у вас есть (разделенный пробелом )список, вы можете преобразовать его в массив (в список )или пройти через него. Обратите внимание, что здесь любой элемент в списке без кавычек, который содержит подстановочный знак (*
, ?
, [
... ]
), будет оцениваться как обычно в контексте текущего каталога, поэтому нам нужно отключить это действие. во-первых (уже одно это является веской причиной для использования массивов/списков, а не строки элементов, разделенных пробелами -):
text='one two twenty-one banana'
OIFS="$IFS" IFS=' ' OSHELLOPTS="$SHELLOPTS"
set -o noglob
for item in $text
do
f "$item"
done
IFS="$OIFS"
[[ ! "$OSHELLOPTS:" =~ [=:]noglob: ]] && set +o noglob
Вариантов предостаточно; вот один со списком, разделенным двоеточием -:
text='one:two:twenty one:banana'
OIFS="$IFS" IFS=':' OSHELLOPTS="$SHELLOPTS"
set -o noglob
...
В этом конкретном случае вы можете использовать синтаксис оболочки {...}
, чтобы охватить список альтернатив.
$ nvim {1,2,3,4}/notes
Еще более удобно, поскольку это числа, вы можете передать их как диапазон, что удобно, поскольку вы начинаете иметь десятки или сотни их, предполагая, что это числа в последовательности:
$ nvim {1..4}/notes
Это не очень общее решение, и не очень хорошо, что оно на самом деле не проверяет, существуют ли каталоги на самом деле, или не использует существующие каталоги в качестве входных данных... Но это может быть удобно в вашем конкретном случае.
Кроме этого, я не мог придумать ничего лучше, чем цикл for
.