Более быстрый и простой способ создания и редактирования несуществующих -файлов в нескольких каталогах

Чтобы применить функцию к списку, вы просто перебираете его:

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
...
2
28.11.2020, 02:33
1 ответ

В этом конкретном случае вы можете использовать синтаксис оболочки {...}, чтобы охватить список альтернатив.

$ nvim {1,2,3,4}/notes

Еще более удобно, поскольку это числа, вы можете передать их как диапазон, что удобно, поскольку вы начинаете иметь десятки или сотни их, предполагая, что это числа в последовательности:

$ nvim {1..4}/notes

Это не очень общее решение, и не очень хорошо, что оно на самом деле не проверяет, существуют ли каталоги на самом деле, или не использует существующие каталоги в качестве входных данных... Но это может быть удобно в вашем конкретном случае.

Кроме этого, я не мог придумать ничего лучше, чем цикл for.

1
18.03.2021, 22:46

Теги

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