有人可以帮我解决这个问题吗?
我正在尝试将awk输出保存到变量中。
variable = `ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}'`
printf "$variable"
编辑:$12对应于运行该进程的一个参数。
谢谢!
#!/bin/bash
variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'`
echo $variable
注意等号后面没有空格。
您还可以使用$()
,它允许嵌套并且易读。
我认为$()语法更容易阅读...
variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}')
但实际问题可能是$12
不应该用""引用。
自问题更改后进行了编辑,这会返回有效数据,但不清楚ps -ef
的期望输出以及变量中期望的内容。
'{printf
之间应该有一个awk
。当回答被编辑时,可能意外地删除了它。 - aDroid如前所述,设置bash变量时,在'='号的左侧的变量名和右侧的变量值之间不允许有空格。
awk可以完成所有操作并避免 "awk"ward 额外的 'grep'。使用awk的printf是为了在字符串中不添加不必要的 "\n",否则这会导致perl-ish匹配程序出现问题。在bash中,您的变量/参数扩展没有这个问题,因此以下任何一种方法都可以:
variable=$(ps -ef | awk '/port 10 \-/ {print $12}')
variable=`ps -ef | awk '/port 10 \-/ {print $12}'`
variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')
[p]
是一个巧妙的技巧,可以从 ps
中删除搜索结果。
@Jeremy
如果您发布 ps -ef | grep "port 10"
的输出以及您需要的行内容,那么更容易帮助您获取正确的语法。
ps -ef
命令的输出是什么?你期望在$variable中得到什么? (如果您无法提供真实数据,则生成一个经过消毒的示例以代替显示问题。) - NiKiZe