|
1 将单引号改双引号,(单引号不支持扩展)
1
2
3
4
5
6
7
8
| [iyunv@localhost ~]# a=123
[iyunv@localhost ~]# echo "1" | sed 's/1/$a/g'
$a
[iyunv@localhost ~]# A="123"
[iyunv@localhost ~]# echo $A
123
[iyunv@localhost ~]# echo "hello world" | sed "s/hello/$A/g"
123 world
|
变量也可以用{}括起来:${变量}
1
2
3
4
| [iyunv@localhost ~]# a=123
[iyunv@localhost ~]# echo "1" | sed "s/1/${a}/g"
123
[iyunv@localhost ~]#
|
不要单双引号
[iyunv@localhost ~]# echo "1" | sed s/1/$a/g
2 使用:'"$var"' , '$var' ,
1
2
3
4
5
| [iyunv@localhost ~]# a=123
[iyunv@localhost ~]# echo 1 |sed 's/1/'$a'/g'
123
[iyunv@localhost ~]# echo 1 |sed 's/1/'"$a"'/g'
123
|
对于网上有人一些说这样也可以:"'$var'"
1
2
| [iyunv@localhost ~]# echo 1 |sed 's/1/"'$a'"/g'
"123" #使用“‘$var’”引用变量,但是引用的变量多了双引号,所以这种方法有点问题的
|
3 以上我们的变量a=123,变量的值是不带空格的,那我们用带空格的变量值,是否上面的方法可以?
1
2
| [iyunv@localhost ~]# a="hello world" #带空格的变量
[iyunv@localhost ~]# echo $a
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| hello world
[iyunv@localhost ~]# echo "1" | sed 's/1/'$a'/g' #使用'$var'引用变量,但是提示有误
sed:-e 表达式 #1,字符 9:unterminated `s' command
[iyunv@localhost ~]# echo "1" | sed s/1/$a/g #什么都不带,也不要单双引号,提示有误
sed:-e 表达式 #1,字符 9:unterminated `s' command
[iyunv@localhost ~]# echo "1" | sed s/1/"$a"/g #语句不带单引号,变量用“$var”,成功
hello world
[iyunv@localhost ~]# echo 1 |sed 's/1/"$a"/g' #要是变量用“$var”,语句用单引号,被强制
"$a"
[iyunv@localhost ~]# echo "1" | sed 's/1/'"$a"'/g' #语句带单引号,变量用‘“$var”’,成功
hello world
[iyunv@localhost ~]# echo 1 |sed s/1/'"$a"'/g #语句不带引号,变量用‘“$var”’,被强制
"$a"
[iyunv@localhost ~]# echo 1 |sed "s/1/'"$a"'/g" #语句带双引号,变量用'"$var"',失败
'123'
[iyunv@localhost ~]# echo "1" | sed 's/1/"'"$a"'"/g' #语句带引号,变量用"'"$var"'" ,多引号
"hello world"
|
4 根据1,2,3,中的输出分析,发现引用变量时,变量是否带空格也是很重要的,所以我建议使用'"$var"' ,但是语句必须要用单引号
1
2
3
4
5
6
| [iyunv@localhost ~]# echo 1 |sed 's/1/'"$a"'/g'
123
[iyunv@localhost ~]# echo "1" | sed 's/1/'"$a"'/g' #语句带单引号,变量用‘“$var”’,成功
hello world
[iyunv@localhost ~]# echo|sed 's/^/'"$(date +"%Y%m%d")"'.rmvb_/g'
20150404.rmvb_
|
|
|
|