Почему переменная передается команде su, но не массиву от того же объема?

Вы могли бы столкнуться с проблемами с cut если у Вас есть несколько пробелов как разделитель. Вы могли использовать awk:

$ awk '{print $2, $4, $5}' OFS='\t' inputfile
BB      DD      BB
2       4       9
6       8       10

(Вы могли предоставить входное и выходное использование разделителя FS и OFS соответственно.)


Править: Согласно Вашим комментариям, если значения находятся в неизвестных столбцах, Вы могли бы сказать:

awk 'NR==1{for(i=1; i<=NF; i++) if ($i=="BB" || $i=="DD") {a[i]++;} } { for (i in a) printf "%s\t", $i; printf "\n"}' filename

Для Вашего входа это привело бы к:

BB      DD      BB
2       4       9
6       8       10

Это работает путем отслеживания столбцы в первой строке, содержащей BB или DD и затем распечатывание тех столбцов.

Если Вы намереваетесь использовать переменную для хранения значений столбцов, Вы могли бы объявить один как:

pattern="^BB$|^DD$"

(обратите внимание что привязки ^ & $ были добавлены для обеспечения этого BB не соответствует ABB и так далее. | снова, regex обозначение метасимвола or)

и затем скажите:

awk -vp="$pattern" 'NR==1{for(i=1; i<=NF; i++) if ($i~p) {a[i]++;} } { for (i in a) printf "%s\t", $i; printf "\n"}' filename
2
05.03.2015, 01:01
2 ответа

При загрузке пакетов раздел и приоритет читаются из файла .Changes . Файлы : stanzas (см. https://www.debian.org/doc/debian-policy/ch-controfolds.html#sf-files ).

Чтобы получить раздел и приоритет из .DSC (и связанных файлов), вы можете использовать DSCEXTRACT из пакета Packcripts с небольшим сценарием Отказ

dscextract <yourdsc> debian/control

извлеките Debian / Control (или сбой, если он не может); Затем вы можете прочитать раздел и приоритет от исходного раздела файла управления (остановка на первой пустой строке).

-121--174925-

Проблема заключалась в том, что поскольку заявление СУ было в двойных цитатах, переменные все были расширены до того, как называлось командование SU, что означает, что $ var становится «кошкой», но $ я становится «», так как Это не было определено. Bash не знает, что предполагалось, что она должна быть переменной итератора, она просто расширяет его в нулевую строку. Ответ - избежать этого «$» так:

#!/bin/bash
var=cat
modules=(
one
two
three
four
)

start() {
    su gleventh -c "for i in ${modules[@]}; do echo -- \$i -- $var;  done"
}

$1

echo "out of function"
for i in ${modules[@]}; do echo -- $i -- $var;  done
2
27.01.2020, 22:05

Специальный параметр $ {Array [@]} в двойных цитатах вызывает раздел слова, если массив имеет более одного участника:

$ for word in "for i in ${arr[@]} ; do" ; do echo "$word" ; done
for i in a
b
c ; do

Если имена ваших модулей не содержат пробелов, вы можете Удачи использовать индекс * :

$ for word in "for i in ${arr[*]} ; do" ; do echo "$word" ; done
for i in a b c ; do
1
27.01.2020, 22:05

Теги

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