任何人都可以帮我解决这个问题吗?
我正在尝试将awk输出保存到变量中。
variable = `ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}'`
printf "$variable"
编辑:$ 12对应于在该进程上运行的参数。
谢谢!
答案 0 :(得分:33)
#!/bin/bash
variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'`
echo $variable
请注意,等号后没有空格。
您还可以使用允许嵌套的$()
并且可读。
答案 1 :(得分:11)
我认为$()语法更容易阅读......
variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}')
但真正的问题可能是$12
不应该与“”
自问题发生变更以来编辑过,这会返回有效数据,但不清楚ps -ef
的预期输出是什么以及变量的预期结果。
答案 2 :(得分:1)
如前所述,设置bash变量不允许LHS上的变量名与“R”上的变量值之间的空格为“=”符号。
awk可以做任何事情并避免“awk”病房额外'grep'。 awk的printf的使用是不在字符串中添加不必要的“\ n”,这将给perl-ish匹配器程序带来麻烦。 bash中案例的变量/参数扩展没有这个问题,所以这些都可以工作:variable=$(ps -ef | awk '/port 10 \-/ {print $12}')
variable=`ps -ef | awk '/port 10 \-/ {print $12}'`
awk记录匹配模式中的' - 'int消除了从搜索结果中删除awk本身的需要。
答案 3 :(得分:0)
variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')
[p]
是一个巧妙的技巧,可以从ps
@Jeremy
如果您发布ps -ef | grep "port 10"
的输出,以及您需要的内容,那么可以更轻松地帮助您获得正确的语法