Как я могу присоединиться к элементам массива в Bash?

Ну, я предложил бы, чтобы сам вопрос был перефразирован. Интерфейсы являются главным образом контрактами, которые получает класс, реализация того контракта самого будет варьироваться. Абстрактный класс будет обычно содержать некоторую логику умолчания, и ее дочерние классы добавят еще некоторую логику. Я сказал бы, что ответ на вопросы полагается на ромбовидную проблему. Java предотвращает множественное наследование для предотвращения его. ( http://en.wikipedia.org/wiki/Diamond_problem ).

381
задан Benjamin W. 29 October 2018 в 07:15
поделиться

4 ответа

Прямо сейчас я использую:

TO_IGNORE=(
    E201 # Whitespace after '('
    E301 # Expected N blank lines, found M
    E303 # Too many blank lines (pep8 gets confused by comments)
)
ARGS="--ignore `echo ${TO_IGNORE[@]} | tr ' ' ','`"

Что работает, но (в общем случае) ужасно ломается, если в элементах массива есть пробелы.

(Для тех, кто заинтересован, это сценарий-оболочка вокруг pep8.py )

1
ответ дан 22 November 2019 в 23:55
поделиться

Этот подход заботится о пробелах внутри значений, но требует цикла:

#!/bin/bash

FOO=( a b c )
BAR=""

for index in ${!FOO[*]}
do
    BAR="$BAR,${FOO[$index]}"
done
echo ${BAR:1}
0
ответ дан 22 November 2019 в 23:55
поделиться

Возможно, например,

SAVE_IFS="$IFS"
IFS=","
FOOJOIN="${FOO[*]}"
IFS="$SAVE_IFS"

echo "$FOOJOIN"
65
ответ дан 22 November 2019 в 23:55
поделиться

Еще одно решение:

#!/bin/bash
foo=('foo bar' 'foo baz' 'bar baz')
bar=$(printf ",%s" "${foo[@]}")
bar=${bar:1}

echo $bar

Edit: то же самое, но для многосимвольного разделителя переменной длины:

#!/bin/bash
separator=")|(" # e.g. constructing regex, pray it does not contain %s
foo=('foo bar' 'foo baz' 'bar baz')
regex="$( printf "${separator}%s" "${foo[@]}" )"
regex="${regex:${#separator}}" # remove leading separator
echo "${regex}"
# Prints: foo bar)|(foo baz)|(bar baz
199
ответ дан 22 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

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