谁能帮我解决这个问题?
我正在尝试将 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
注意等号后面没有空格。
您还可以使用$()
which 允许嵌套并且是可读的。
我认为 $() 语法更容易阅读......
variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}')
但真正的问题可能是$12
不应该用“”来引用
由于问题已更改,因此已进行编辑,这将返回有效数据,但尚不清楚预期的输出ps -ef
是什么以及变量中的预期是什么。
如前所述,设置 bash 变量不允许在 LHS 上的变量名和 RHS 上的变量值之间使用“=”号空格。
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}'`
'-' int awk 记录匹配模式消除了从搜索结果中删除 awk 本身的需要。
variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')
这[p]
是一个巧妙的技巧,可以从显示中删除搜索ps
@Jeremy如果您发布 的输出ps -ef | grep "port 10"
,以及您需要的内容,那么帮助您获得正确的语法会更容易