在 shell 脚本中处理字符串操作(并测试 grep 的结果)

dot*_*ose 1 shell-script touchpad

我已经编写了这个脚本来切换我的触摸板(我将对其进行键绑定),但它不起作用。为什么这段代码不起作用?我怎样才能更优雅地完成这个功能?

#!/bin/sh

if [ "synclient | grep TouchpadOff | grep -o -E '[0-9]+'" ]
then
        synclient TouchpadOff=0
        notify-send "Touchpad Enabled"
else
        synclient TouchpadOff=1
        notify-send "Touchpad Disabled"
fi
Run Code Online (Sandbox Code Playgroud)

ica*_*rus 6

当你写

 if [ "some string or other" ]
 then
Run Code Online (Sandbox Code Playgroud)

[运营商不运行some string or other,它只是看到一个非空字符串,并说这是一个true值。

你要

 if [ "`synclient | grep TouchpadOff | grep -o -E '[0-9]+'`" ] 
Run Code Online (Sandbox Code Playgroud)

或者更现代的

if [ "$(synclient | grep TouchpadOff | grep -o -E '[0-9]+')" ]
Run Code Online (Sandbox Code Playgroud)

但实际上没有必要查看命令是否生成字符串,因为 grep 会生成退出代码,因此

if synclient | grep TouchpadOff | grep -q -E '[0-9]+'
then
Run Code Online (Sandbox Code Playgroud)

应该做你想做的。我不知道 synclient 的输出格式,但我希望您可以毫不费力地将两个 grep 合二为一。