我如何告诉 sed 停止尝试处理命令?

我如何告诉 sed 停止尝试处理命令?

也许我是个白痴(这是可能的情况,而且我对 sed/bash 脚本还不熟悉),但为什么这样做有效呢:

NewVersion="$(echo $NewVersionFile | sed 's/^.*-\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/')"

但事实并非如此:

NewVersion={echo $NewVersionFile | sed 's/^.*-\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'}

第二条命令的结果是sed: -e expression #1, char 39: unexpected }'

我怎样告诉 sed 之后停止执行任何操作'

答案1

{是 bash 的内置命令,可用于对命令进行分组。

{
    printf 'a\tb\n'
    printf 'c\td\n'
} | cut -f1

它也用于参数扩展

x=abc
echo ${x^^}

但你不能用它来代替$(;事实上,在赋值之后,它没有特殊含义,所以它是赋值的一部分。这就是为什么sed会看到右括号:

NewVersion={echo $NewVersionFile | sed 's/^.*-\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/'}
   ^        ^        ^           ^   ^                 ^
   |        |        |           |   |                 |
Variable Variable  Command     Pipe  Second     Argument of sed
 name     value    to run            command    (single quotes removed by quote
                                                 removal, but closing brace kept)

相关内容