在stringbash中连接variables

我想杀死指定端口(variables)的进程

export PORT=3030 netstat -ntlp | awk '$4~/:*${PORT}$/{gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}' 

但可变的PORT没有得到的命令。

使用lsof执行此任务:

 PORT=3030 kill $(lsof -t -ni:$PORT) 

尝试使用双引号来包装awk命令而不是单引号。 Bash不会replace单引号内的variables。

您需要将命令内的双引号改为单引号,或者用反斜杠进行转义。

添加到以前的答案,只是为了显示一种方法来解决你的方法:

 netstat -ntlp | awk '$4 ~ PORT {gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}' PORT='3030' 

要么

 export PORT=3030 netstat -ntlp | awk '$4~ ENVIRON["PORT"] {gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}' 

单引号要求shell不加任何改变地传递封闭的string。 所以${PORT}没有被翻译成3030.它只是一堆字符和其他string一样。

使用这个: '$4~/:*'${PORT}'$/{gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}'
您只需在${port}之前closures单引号,然后重新打开(不带任何空格)。 这将允许shell转换你的variables。