也许我是个白痴(这是可能的情况,而且我对 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)