我有这个脚本,但它不起作用。我认为这是因为它无法评估 if 语句中的数字比较。
#!/bin/bash
{ read __ WIDTH; read __ HEIGHT; read __ __ BORDER_WIDTH; } < <(xwininfo -id "$(xdotool getactivewindow)" | grep -o -e 'Height:.*' -e 'Width:.*' -e 'Border width:.*')
echo "Height: $HEIGHT, Width: $WIDTH, Border width: $BORDER_WIDTH"
x = 1920
if($WIDTH == x)
then
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz
else
xdotool key Ctrl+F12
fi
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
脚本有几个问题:
bash测试要么使用test,[ .. ]要么[[ .. ]]; (..)表示子壳
赋值不带空格,x = 1920将调用x带有参数=和的命令1920。使用x=1920来代替。
使用变量名时需要以美元符号作为前缀。所以== x是坏的== $x也是好的。(除了在算术评估或扩展中:(( ... ))or $(( ... )),感谢Kusalananda 的评论)。
数字应该与-eq,进行比较,=用于字符串比较。在您的情况下,它也应该有效,因为数字可能以相同的方式存储,但最好使用概念上正确的运算符。==是一个非标准的等价于=.
如果可能,您应该习惯于在任何地方双引号变量,例如,这可以防止 globbing。
我只修复从 开始的行x = 1920,固定版本是:
x=1920
if [ "$WIDTH" -eq "$x" ]
then
wmctrl -r :ACTIVE: -b toggle,maximized_vert,maximized_horz
else
xdotool key Ctrl+F12
fi
Run Code Online (Sandbox Code Playgroud)