一些相关问题已接近但未直接回答我的问题。我正在尝试将具有附加sed命令的变量设置为新变量。我尝试了什么:
NEW_VARIABLE="$OUTPUT | sed -e 's/.*\#//' | cut -d ' ' -f 1"
NEW_VARIABLE=($OUTPUT | sed -e 's/.*\#//' | cut -d ' ' -f 1)
NEW_VARIABLE=$(OUTPUT | sed -e 's/.*\#//' | cut -d ' ' -f 1)
NEW_VARIABLE=(${OUTPUT} | sed -e 's/.*\#//' | cut -d ' ' -f 1)
NEW_VARIABLE=`$OUTPUT | sed -e 's/.*\#//' | cut -d ' ' -f 1`
鉴于$ OUTPUT使用#符号吐出数字。 (例如#89)sed切断#并且只吐出89.我想将该输出设置为新变量。我接近了吗?
答案 0 :(得分:2)
为了将变量传递给命令,您需要使用echo
或printf
。
NEW_VARIABLE=$(printf '%s\n' "$OUTPUT" | sed -e 's/.*\#//' | cut -d ' ' -f 1)
当你只是将它放在命令中时,shell将尝试将其内容作为命令执行,而不是打印它。
您也可以使用here-string:
NEW_VARIABLE=$(sed -e 's/.*\#//' <<<"$OUTPUT" | cut -d ' ' -f 1)
但更好的是只使用shell的内置扩展操作符:
# Remove everything until last #
NEW_VARIABLE=${OUTPUT##*#}
# Remove everything after first space
NEW_VARIABLE=${NEW_VARIABLE% *}
答案 1 :(得分:1)
您不需要sed
或cut
。使用read
和参数扩展运算符。
read NEW_VARIABLE rest <<< "${OUTPUT##*#}"
`