Bash 提取由特殊字符“*”标识的行并将其存储在变量中

Bash 提取由特殊字符“*”标识的行并将其存储在变量中,bash,grep,special-characters,Bash,Grep,Special Characters,在Lubuntu 16.02上,此命令显示有关所有桌面的信息: $ wmctrl -d 0 - DG: 3926x1600 VP: 0,0 WA: 0,24 2560x1576 desktop 1 1 - DG: 3926x1600 VP: 0,0 WA: 0,24 2560x1576 desktop 2 2 * DG: 3926x1600 VP: 0,0 WA: 0,24 2560x1576 desktop 3 3 - DG: 3926x1600 VP: 0,0

在Lubuntu 16.02上,此命令显示有关所有桌面的信息:

$ wmctrl -d
0  - DG: 3926x1600  VP: 0,0  WA: 0,24 2560x1576  desktop 1
1  - DG: 3926x1600  VP: 0,0  WA: 0,24 2560x1576  desktop 2
2  * DG: 3926x1600  VP: 0,0  WA: 0,24 2560x1576  desktop 3
3  - DG: 3926x1600  VP: 0,0  WA: 0,24 2560x1576  desktop 4
4  - DG: 3926x1600  VP: 0,0  WA: 0,24 2560x1576  desktop 5
需要存储和处理有关active desktop的信息,通过以下方式显示:

$ wmctrl -d | grep "*"
2  * DG: 3926x1600  VP: 0,0  WA: 0,24 2560x1576  desktop 3
出于某种奇怪的原因,此解决方案无法存储所需的信息:

$ activedesktop=$(wmctrl -d | grep "*")
$ echo $activedesktop
2 Desktop Documents Downloads Mail Music Pictures Public Videos DG: 3926x1600 VP: 0,0 WA: 0,24 2560x1576 desktop 3
变量在*应该位于的位置插入主目录名称


为什么会发生这种情况,以及如何解决它?

正如@melpomene所指出的,变量确实存储了所需的信息,但前一个回音解释了星号


因此,解决方案就是像echo$activedesktop中那样,对变量进行双引号引用。

转义*。或者使用grep[*]。另外,请参见@WiktorStribiżew activedesktop=$wmctrl-d | grep\*和activedesktop=$wmctrl-d | grep[*]引发相同的错误结果…尝试echo$activedesktop。@melpomene gosh!我看到它在第二个位置替换了星号…不是原因,但我建议fgrep或GNU grep-F匹配固定模式,而不是regexp。