Возможный использовать фигурную скобку (перестановка) и расширение массива одновременно?

Должно было добавить следующее к /etc/modprobe.d/blacklist.conf

blacklist radeon

Это теперь закрывается X правильно, но я получаю соблюдающие предупреждения:

(WW) fglrx: No matching Device section for instance (BusID PCI:0@0:1:1) found
(WW) fglrx: No matching Device section for instance (BusID PCI:0@0:17:0) found
(WW) fglrx: No matching Device section for instance (BusID PCI:0@0:18:0) found
.... etc
12
17.09.2013, 16:22
3 ответа

Это возможно с zsh:

$ CONS=( b c d )
$ VOWEL=( a e i o u )
$ echo $^CONS$^VOWEL
ba be bi bo bu ca ce ci co cu da de di do du

Или es:

; VOWEL=( a e i o u )
; CONS=( b c d )
; echo $VOWEL^$CONS
ab ac ad eb ec ed ib ic id ob oc od ub uc ud

С bash или ksh93, необходимо было бы сделать что-то замысловатое как:

VOWEL=( a e i o u )
CONS=( b c d )
qVOWEL=$(printf %q, "${VOWEL[@]}")
qCONS=$(printf %q, "${CONS[@]}")
eval "echo {${qVOWEL%,}}{${qCONS%,}}"
9
27.01.2020, 19:55
  • 1
    Просто еще одна причина использовать zsh. –  Kevin 17.09.2013, 01:08
  • 2
    Вы уверены, что нет никакого более прямого способа сделать это в ударе? Или Вы просто подозреваете, что это так? –  Catskul 17.09.2013, 01:09
  • 3
    @Catskul, нет, я сильно сомневаюсь относительно этого, но я не уверен, я еще менее уверен для ksh93, где много функций не документируются. Можно хотеть оставить вопрос открытым некоторое время. Я вполне уверен, Вы не можете сделать этого с расширением фигурной скобки без другого уровня оценки (с eval или .)все же. –  Stéphane Chazelas 17.09.2013, 01:14
  • 4
    eval "echo {$(printf ',%s' "${CONS[@]}" "${VOWEL[@]}" | tail -c+2)}" (Не работающий на единственный элемент все же.) –  Rockallite 24.02.2017, 03:31

Вы могли бы использовать оценку с IFS=,; "${array[*]}" (который присоединяется к значениям с запятыми), или всего два для циклов:

$ CONS=(b c d);VOWEL=(a e i o u)
$ IFS=,;eval echo "{${CONS[*]}}{${VOWEL[*]}}"
ba be bi bo bu ca ce ci co cu da de di do du
$ for c in "${CONS[@]}";do for v in "${VOWEL[@]}";do echo "$c$v";done;done|paste -sd' ' -
ba be bi bo bu ca ce ci co cu da de di do du
10
27.01.2020, 19:55

Забавно, но, вероятно, не самое лучшее.

temparr=( b{a,e,i,o,u} c{a,e,i,o,u} d{a,e,i,o,u} )
echo "${temparr[@]}"
2
27.01.2020, 19:55

Теги

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