арифметическое выражение: основное ожидание

Я пытаюсь добавить функцию к .bashrc файлу.

Функция, как предполагается, изменяет непрозрачность любого Окна приложения согласно параметру командной строки.

opa(){
    sh -c 'xprop -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY $(printf 0x%x $((0xffffffff * $1 / 100)))'
}

Я попробовал вышеупомянутое однако, оно бросает эту ошибку:

sh: 1: arithmetic expression: expecting primary: "0xffffffff *  / 100"
usage:  xprop [-options ...] [[format [dformat]] atom] ...

Как я фиксирую это? Кроме того, есть ли любой способ установить значение по умолчанию для $1 в случае, если пользователь не передает параметра командной строки?

0
задан 1 April 2020 в 20:57

1 ответ

Не имеет никакого смысла (мне, по крайней мере) запускать подоболочку в функции оболочки - особенно не a sh оболочка внутри .bashrc

Вместо этого Вы могли просто сделать

opa(){
    xprop -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY $(printf 0x%x $((0xffffffff * $1 / 100)))
}

Если Вы хотите предоставить значение по умолчанию, можно сделать настолько использующий ${parameter:-word} или ${parameter-word} синтаксис (в зависимости от того, хотите ли Вы, чтобы значение по умолчанию вступило в силу когда $1 не определено или пуст, или только когда это не определено),

т.е.

opa(){
    xprop -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY $(printf 0x%x $((0xffffffff * ${1:-60} / 100)))
}

Если Вы действительно хотите использовать a sh -c '...' подоболочка, необходимо было бы передать $1 от родительского удара окружают в ребенка sh оболочка

opa(){
    sh -c 'xprop -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY $(printf 0x%x $((0xffffffff * $1 / 100)))' sh "${1:-60}"
}
0
ответ дан 7 April 2020 в 23:22

Другие вопросы по тегам:

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