sed 不是从 sh 文件工作,而是从命令行工作

Pan*_*han 3 sed

sed从命令行工作,但如果把它放在一个sh文件中并执行它就不起作用。我想更改现有文件中的数字并将其定向到新文件,因此我尝试了以下操作:

echo enter number 
read num
var1='more ods2.sql | egrep -e "test" | cut -c 5-7' 
sed "s/test$var1/test$num/g" ods2.sql > odstest.sql
Run Code Online (Sandbox Code Playgroud)

如果我在提示中执行这些语句,它们会以所需的结果执行。我用$var1我传递的字符串替换了,例如12345

sed "s/test$var1/test$num/g" ods2.sql > odstest.sql
Run Code Online (Sandbox Code Playgroud)

这也可以从提示中正常工作:

more ods2.sql | egrep -e "test" | cut -c 5-7'
Run Code Online (Sandbox Code Playgroud)

如果我把它放在一个 shell 脚本中,为什么它不起作用?

Kyl*_*nes 7

这条线

var1='more ods2.sql | egrep -e "test" | cut -c 5-7'
Run Code Online (Sandbox Code Playgroud)

应该

var1=`more ods2.sql | egrep -e "test" | cut -c 5-7`
Run Code Online (Sandbox Code Playgroud)

即您需要使用反引号而不是单引号(撇号)。

  • 或者使用更容易看到的`$()`,[还有其他好处](http://mywiki.wooledge.org/BashFAQ/082)。 (3认同)