grep 后传变量无效

test.sh文件

ps -ef|grep gitbook|grep 24002|grep 4002

运行结果

root       1960   1948  7 14:25 ?        00:00:02 node /usr/local/bin/gitbook serve --lrport 24002 --port 4002

可以查到相应的进程

test2.sh文件(用变量作为grep查询条件)

lrport=24002
port=4002
ps -ef|grep gitbook|grep $lrport|grep $port

运行后查询不到相关内容。查询不到相关内容

排查问题原因:

用cat -A和bash -x命令查看test2.sh文件

cat -A test2.sh

lrport=24002^M$
port=4002^M$
ps -ef|grep gitbook|grep $lrport|grep $portr


 bash -x  test2.sh

+ lrport=$'24002\r'
+ port=$'4002\r'
+ grep $'4002\r'
+ grep $'24002\r'
+ grep gitbook
+ ps -ef

发现变量后都有换行符\r,而源文件中除去最后一行,每行后面都有'^M$’,网上查了一下最后发现了导致问题的最终原因:

test2.sh是在windows上编写然后拷贝到linux上的,可能因为两者的编码方式不一样。

在linux上用vi重新编写一份一摸一样的文件,能够正常查询到结果。

结论:编写需要在linux上的shell文件时,请勿在window上编写后再拷贝过去,可能会造成一些由于编码方式不同而产生的错误。

你可能感兴趣的:(grep 后传变量无效)