将命令输出分配给bash中的变量

Cad*_*deq 0 linux variables bash

我在尝试制作bash脚本时遇到问题.

这是命令:

ps -ef | grep "python ./" |awk '{print $2 }' | head -n 1
Run Code Online (Sandbox Code Playgroud)

这是我如何保存变量

first =$(ps -ef | grep "python ./" |awk '{print $2 }' | head -n 1)
Run Code Online (Sandbox Code Playgroud)

当我执行此脚本时,控制台说:

./test.sh:line3:2748:未找到订单

我究竟做错了什么?谢谢

fed*_*qui 7

变量赋值是这样的: var=$(command).

所以在你的情况下,你写了一个太多的空间.代替:

first =$(ps -ef | grep "python ./" |awk '{print $2 }' | head -n 1)
     ^
Run Code Online (Sandbox Code Playgroud)

你需要写:

first=$(ps -ef | grep "python ./" |awk '{print $2 }' | head -n 1)
     ^
     no spaces around = !!
Run Code Online (Sandbox Code Playgroud)

你为什么收到这条错误信息?

./test.sh:line3:2748:未找到订单

因为first XX,Bash明白你正在尝试first使用参数运行命令XX.


附录:让命令更为直接,没有尽可能多的管道,使用单一awk由汤姆·芬内克建议(感谢!):

ps -ef | awk '/python \.\//{print $2; exit}'
               ^^^^^^^^^^   ^^^^^^^^  ^^^^
                    |          |      stop processing, to get 1 value
                    |       print the 2nd block
               match lines with python ./
Run Code Online (Sandbox Code Playgroud)