参数替换

时间:2014-06-30 11:02:05

标签: bash

我有一个名为line的变量,它包含XML中的一行

user@ubuntu:~$ echo $line
<Ticket State="inWork" />
user@ubuntu:~$ 

我想获取inWork文本,所以基本上是引号之间的字符串。想要使用 $ {var#Pattern} $ {var%Pattern} syntax来实现这一目标。

第一部分按预期工作

user@ubuntu:~$ line=${line#*\"}
user@ubuntu:~$ echo $line
inWork" />
user@ubuntu:~$ 

但第二部分并没有剥离" />

user@ubuntu:~$ line=${line%*\"}
user@ubuntu:~$ echo $line
inWork" />
user@ubuntu:~$ 

任何线索为什么不起作用?

1 个答案:

答案 0 :(得分:1)

这是因为模式*\"并不匹配。您希望在字符串结尾方案中\"*

line='<Ticket State="inWork" />'
echo ${line#*\"}
echo ${line%\"*}

不使用参数替换的可能替代方案:

cut -d'"' -f2 <<< $line