我有两个变量,它们的输出如下所示。
echo $VAR_ONE
'https://url_one','https://url_two'
echo $VAR_TWO
'https://url_two'
我想从**$VAR_ONE中删除'https://url_two'(即$VAR_TWO),并将设置为另一个变量**。我执行了下面的命令,但出现了一个错误。
VAR_THREE=$(echo $VAR_ONE | sed s/"$VAR_TWO"//)
sed: bad option in substitution expression
添加到脚本以及,但相同的错误
#!/bin/bash
VAR_ONE=$(echo "'https://url_one','https://url_two'")
VAR_TWO=$(echo "'https://url_two'")
VAR_THREE=$(echo $VAR_ONE | sed s/"$VAR_TWO"//)
2条答案
按热度按时间ozxc1zmp1#
使用bash,不需要外部调用。它的“模式替换”形式parameter expansion足够强大:
输出:
qacovj5a2#
解析为调用
sed "s/'https://url_one','https://url_two'/'https://url_two'/"
,这显然是不正确的,因为seds
命令必须使用正好3个(非转义)分隔符来调用,而您的调用使用了其中的9个。一种解决方案是使用一个分隔符,它既不是你的模式的一部分,也不是你的替换,例如:
#
:请注意,一旦您的URL包含
#
,此操作就会中断。我建议不要使用sed
,而是调用awk
,它可以正确地处理变量,并且可以在没有shell将它们插入程序的情况下这样做(这可以避免各种问题)。