Как работают диапазоны в тире?

Команда перезапуска не использует новую конфигурацию Upstart. Есть еще несколько вещей, которые она не выполняет. Подробности см. ниже: http://upstart.ubuntu.com/cookbook/#restart

2
12.03.2019, 12:34
2 ответа

Расширение фигурной скобки не определяется POSIX как таковое, для преобразования необходимо использовать параметры из других средств подачи жалоб POSIX. Одним из таких способов было бы использование таблицы ASCII для отображения преобразования значений ASCII символов в их значение символов с помощью printf(). Найдите man asciiдля отображения значений.

i=1
asciiStart=97
asciiEnd=99
while [ "$i" -le 5 ]
do
    while [ "$asciiStart" -le "$asciiEnd" ]
    do
        echo "$HOME$i$(printf "\\$(printf '%03o' "$asciiStart")")"
        asciiStart=$((asciiStart + 1))
    done
    asciiStart=97
    i=$(( i + 1 )) 
done
0
27.01.2020, 22:17

Вероятно, нет,поскольку, если бы была другая функция, которая делала то, что делает расширение фигурной скобки, не было бы необходимости в раскрытии фигурной скобки...

Обратите внимание, что если ваши списки не являются статическими (, например. верхний предел варьируется ), тогда вы также не можете легко использовать раскрытие скобок в Bash, поскольку {1..$n}не делает то, что вы хотите (скобки раскрываются перед переменными ).

С другой стороны, если ваши списки являются статическими, нетрудно просто использовать какую-либо другую программу для создания списков и вставки их непосредственно в скрипт, так что вы просто получите:

for x in 1 2 3 4 5; do
    for y in a b c; do
        echo "$HOME$x$y"
    done
done

Использование whileдля создания списка символов также может показаться немного сложным в оболочке.

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

highnum=5 highchar=c perl -le 'for $x (1..$ENV{highnum}) { 
                                  for $y ("a"..$ENV{highchar}) { 
                                     print "$ENV{HOME}/$x$y"; } }'
1
27.01.2020, 22:17

Теги

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