bash命令替换转义

时间:2014-12-31 15:50:03

标签: bash escaping command-substitution

我希望将以下命令的结果输入变量。

xprop -name "google-chrome-stable" | grep "window id" | awk '{print $5}' | awk '{print $1}'

结果看起来应该是那样的

OUTPUT=xprop -name "google-chrome-stable" | grep "window id" | awk '{print $5}' | awk '{print $1}'
echo $OUTPUT

我知道可以通过命令替换来完成。 链接command substitution中的示例不够详细,因为它们没有解释如何转义引号和撇号。 有人可以帮我找出解决方法吗?

2 个答案:

答案 0 :(得分:1)

看起来你只需要这样做:

output=$(xprop -name "google-chrome-stable" | awk '/window id/{print $5}')
echo "$output"

$( )内无需进行任何转义。我已经将变量包装在双引号中以防止发生诸如glob扩展之类的事情。作为奖励,我结合了你的grep和awk命令并删除了最后一个没有做任何有用的事情。

我还将你的变量名称设为小写。应为shell内部保留大写变量名。有一天,当你有一个名为$PATH的变量并且突然一切都停止工作时,你会感谢我...

答案 1 :(得分:1)

如果您尝试获取群组领导者窗口,则可以使用以下内容。

output=$(xprop -notype -f WM_HINTS "32mx" ' ?m6($8)\n' -name google-chrome-stable WM_HINTS | awk '{print $2}')
echo "$output"

-f的参数来自xprop源本身以及一些阅读formatdformat的手册页。

xprop man pageDescription部分解释了formatdformat的所有内容。