Чтобы получить Dvorak на «внешней» клавиатуре, его необходимо вручную выбрать в настройках, выбрав «Настройки»> «Основные»> «Клавиатура»> «Аппаратная клавиатура»> «Английский (США)» и затем выбрав «Dvorak». Конечно, после сброса он просто возвращается в Qwerty.
По сути, «Используйте тот же язык клавиатуры, что и в macOS» для Дворжака. Это может быть связано с тем, что он не является настройкой программной клавиатуры.
В Bash, printf
обеспечивается оболочкой (см. удар (1) страница справочника, ищите "printf"), таким образом, у Вас даже нет (минимальных) издержек fork()
и exec()
выполнить отдельную команду - если Вы не выполняете его из обратных галочек. Встроенный printf Bash позволяет Вам присвоить вывод данной переменной с -v
аргумент; Ваш фрагмент сценария мог быть переписан как:
for ((i=23; i<42;i++)); do
printf -v ii "%02i\n" $i
sh ../myprogram $ii
done
Я не уверен, что полагал бы что более читаемый, чем оригинал.
Самая ресурсоемкая часть Вашего фрагмента сценария называет Ваш другой сценарий оболочки; я не волновался бы об издержках вызова printf, если новые доказательства не указывают иначе.
отредактированный для добавления различия между обратными галочками и прямым выполнением
Ваше число уже имеет 2 десятичных разряда. Почему необходимо использовать printf затем? Если я помню правильно (не имейте оболочки для тестирования здесь), оно просто заполняет число до 2 десятичных чисел при использовании с теми флагами. Лично, мне нравится xargs:
seq 23 42 | xargs -n1 sh ../myprogram
Можно использовать -w
аргумент в пользу seq
, который заполняет числа нулями при необходимости, таким образом, они имеют весь одинаковый ширина.
Это складывается seq
конкретный Linux. Спасибо за Dave в комментариях для понимания его (его ответ). Использовать printf
непосредственно, без цикла:
printf '%02i\n' {23..42} | xargs -n1 sh ../myprogram
Мне нравится использовать xargs
, потому что это позволяет легко выполнять Ваши команды параллельно некоторый предел, может передать больше чем одно число сразу и позволяет другие гибкие опции. Как Dave, я рекомендую Вам отбросить sh
от него, и место он в Ваш сценарий оболочки, как первая строка вместо этого:
#!/bin/sh
.....
Затем просто выполните свой материал как
printf '%02i\n' {23..42} | xargs -n1 ../myprogram
Это более универсально, и позволяет Вашему сценарию также быть названным exec
Вызовы библиотеки C (по крайней мере, в Linux, это имеет место).
К вашему сведению: совершенно другое решение:
jot -w "%02i" - 23 42 | xargs -n 1 ../myprogram
Это имеет оборотную сторону производительности вызова капли (стандарт с тех пор 4.2BSD, таким образом, все производные BSD имеют его, но беглый взгляд показывает, что этому основному замечательному инструменту, кажется, недостает от дистрибутивов Linux, я смотрел на).Править: Linux (по крайней мере, Red Hat), кажется, имеет подмножество функций капли в команде, названной seq (благодаря ответу litb для этой информации).
Это обладает преимуществом работы в оболочках неудара также (в отличие от того, что думают некоторые люди, существует больше чем одна оболочка в активном использовании, и агностическими оболочкой решениями обычно является хорошая идея).
Как насчет
for i in {23..42} ; do
sh ../myprogram $i
done
Числа между 23 и 42 всегда будут в %02i формате.
Если абсолютно необходимо отформатировать, то
for i in {23..42} ; do
printf "%02i\n" | xargs -n1 sh ../myprogram $i
done
Заменяет издержками порождения xargs для издержек порождения подоболочки для обратных галочек. Я понятия не имею, который более эффективен.