2016-07-24 112 views
0

试图写一个bash脚本包含嵌套美元的变量,我无法得到它的工作:嵌套美元符号,引号里的

#!/bin/bash 
sed '4s/.*/$(grep "remote.*$1" /home/txtfile)/' /home/target 

错误说:

SED/-e表达#1,字符30:未知选项的's'

问题似乎来自$ 1,它需要由从bash调用传递的参数替换,然后整个$(...)需要被命令调用替换,所以我们用字符串输出替换目标行4。

回答

0

单引号内放时可变扩展和命令替换不会做,使用双引号来代替:

sed "4s/.*/$(grep "remote.*$1" /home/txtfile)/" /home/target 
+0

这会产生各种输入的值和/或目录的从执行它的内容鼻恶魔因为'remote。* $ 1'是un引。 –

0

你的做法是错误的,做你想要什么是正确的方法就是一个命令,像这样(取决于你可能$1值和输入文件的内容,你还没有告诉我们):

awk -v tgt='remote.*$1' ' 
NR==FNR { if ($0 ~ tgt) str = str $0 ORS; next } 
FNR==4 { printf "%s", str; next } 
{ print } 
' /home/txtfile /home/target