在终端中使用变量

问题描述 投票:1回答:1

我写了这段代码:

cat /etc/passwd | cut -d : -f1 | sed -n "${FT_LINE1}, ${FT_LINE2} p"

输出:

sed: -e expression #1, char 1: unknown command: `,'

但我有变量$FT_LINE1, $FT_LINE2的问题。 当我使用常量而不是变量时,此代码可以正常工作

cat /etc/passwd | cut -d : -f1 | sed -n "3, 5 p"

我试着使用这些结构:

sed -n -e "${FT_LINE1}, ${FT_LINE2} p"
sed -n "{$FT_LINE1}, {$FT_LINE2} p"
sed -n "${FT_LINE1},${FT_LINE2} p"
sed -n "${FT_LINE1}, ${FT_LINE2}" p
sed -n "$FT_LINE1, $FT_LINE2" p

但错误仍然存​​在。

bash shell unix sed command-line
1个回答
1
投票

melpomenePesaThe's comments所述,sed地址范围不能为空,壳变量${FT_LINE1}${FT_LINE2}必须设置为某个适当的值。

这种重现错误的最简单方法是:

sed ,

哪个输出:

sed: -e expression #1, char 1: unknown command: `,'

因为,不是sed命令,所以它只是一个分隔范围地址的分隔符。

查看其他一些相关错误可能会有所帮助。让我们添加1的起始地址:

sed 1,

输出:

sed: -e expression #1, char 2: unexpected `,'

这似乎没有用,因为它应该在,之后期待一个地址。现在让我们添加第二个地址1:

sed 1,1

输出:

sed: -e expression #1, char 3: missing command

好一点,但实际上它是缺少命令的char 4,或者更确切地说是在char 3之后缺少命令。

现在让我们添加一个命令和一些输入,它可以工作:

echo foo | sed 1,1p

输出:

foo
© www.soinside.com 2019 - 2024. All rights reserved.