算术表达式:期望主要

算术表达式:期望主要

我正在尝试向 .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我该如何解决这个问题?另外,如果用户没有传递任何命令行参数,有没有办法设置默认值?

答案1

在 shell 函数内启动子 shell 是没有意义的(至少对我来说)- 特别是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,或者仅在未定义时生效)

IE

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

如果你真的想要使用sh -c '...'子 shell,你需要$1从父 bash shell 传递到子shshell

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

相关内容