我使用echo和sed在两个字符串之间打印一个字符串,但它给了我错误“没有这样的目录文件”
$SEARCH_1=12
$FO_FILE=myfile.txt
SEARCH=$(head -$SEARCH_1 $FO_FILE | tail -1 | grep BShare)
LOC=echo $SEARCH_2 | sed 's/\(.*\)BShare>\(.*\)<\/BShare\(.*\)/\2/g'
如果我不使用LOC =并仅使用echo,则会正确打印字符串。 示例
<test>mystring</test> will be printed as mystring
但如果我将echo命令分配给变量,则说“没有这样的文件或目录”
答案 0 :(得分:2)
要捕获命令的输出并将其分配给变量,您需要使用反引号或$( ... )
,例如
LOC=`echo $SEARCH_2 | sed 's/\(.*\)BShare>\(.*\)<\/BShare\(.*\)/\2/g'`
或
LOC=$(echo $SEARCH_2 | sed 's/\(.*\)BShare>\(.*\)<\/BShare\(.*\)/\2/g')
原始命令的问题
LOC=echo $SEARCH_2 | sed 's/\(.*\)BShare>\(.*\)<\/BShare\(.*\)/\2/g'
是shell在这里尝试运行$SEARCH_2
求值的东西(环境变量LOC设置为值echo),并将其输出传递给sed。