我正在尝试向 .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 传递到子sh
shell
opa(){
sh -c 'xprop -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY $(printf 0x%x $((0xffffffff * $1 / 100)))' sh "${1:-60}"
}