如何在bash中设置一个修改行为的变量到另一个变量?

时间:2015-09-04 21:29:09

标签: bash variables sed output

一些相关问题已接近但未直接回答我的问题。我正在尝试将具有附加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.我想将该输出设置为新变量。我接近了吗?

2 个答案:

答案 0 :(得分:2)

为了将变量传递给命令,您需要使用echoprintf

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)

您不需要sedcut。使用read和参数扩展运算符。

read NEW_VARIABLE rest <<< "${OUTPUT##*#}"

`