bash回音问题

bash回音问题,bash,sed,echo,Bash,Sed,Echo,下面是一个bash脚本,它从html文件中提取一些数据 price=`grep ' <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^ *//g'` grep ' <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^ */

下面是一个bash脚本,它从html文件中提取一些数据

price=`grep '        <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^  *//g'`
grep '        <td>\$' $1 | sed -e 's/<td>//g' -e 's:</td>::g' -e 's/\$ //g' -e 's/^  *//g'

echo "Price: $price"
price=`grep'\$'$1 | sed-e's///g'-e's:::g'-e's/\$//g'-e's/^*//g'`
grep'\$'$1 | sed-e's///g'-e's:::g'-e's/\$//g'-e's/^*//g'
echo“价格:$Price”

sed部分可能需要一些帮助,但这不是问题所在。问题是,当我运行脚本时,它应该将找到的值打印两次,对吗?但它只打印一次,第一次(没有“价格:”)。这里有什么问题?

问题是您返回的字符串中有一个
\r
,它会在打印内容之前将光标返回到第一列。使用
od-c
进行验证。并使用适当的工具,例如确保不会发生这种情况。

第一个grep读取标准输入上的所有内容。然后,第二个grep块尝试读取stdin。

我猜与显示的代码不同,赋值实际上发生在子shell中,因此不可见(在子shell退出时丢失)

恐怕你遇到了一个你没有在这里展示的子shell问题。如果可以的话,发布更多你实际使用的代码

---样本:

 unset price
 price=1
 echo $price   # works

 unset price
 echo -n 1 | price=$(cat)
 echo $price   # works _not_

关于您使用sed的几点意见:

-e's/^*//g'
--您不需要“g”:您的模式在开始时被锚定,因此它只能匹配一次。也可以查找选项卡:
-e的/^[:space:]\{1,\}/'


-e's///g'-e's::g'
可以折叠成
-e's | | | g'

没有更多的代码,这就是整个脚本(好吧,带有变量的部分是)。它是这样运行的:很好。然后,可能性正在向IgnacioPS提到的“\r”假设转移。不用说你穿的是哪双鞋哈哈哈