如何在 bash 中将具有修改行为的变量设置为另一个变量?
How to set a variable with modifying behavior to another variable in bash?
一些相关问题很接近,但没有直接回答我的问题。我正在尝试将具有附加 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。我想将该输出设置为一个新变量。我接近了吗?
为了将变量通过管道传递给命令,您需要使用 echo
或 printf
。
NEW_VARIABLE=$(printf '%s\n' "$OUTPUT" | sed -e 's/.*\#//' | cut -d ' ' -f 1)
当你单独将它放在命令中时,shell 将尝试将其内容作为命令执行,而不是打印它。
您也可以使用此处的字符串:
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% *}
您不需要 sed
或 cut
。使用 read
和参数扩展运算符。
read NEW_VARIABLE rest <<< "${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。我想将该输出设置为一个新变量。我接近了吗?
为了将变量通过管道传递给命令,您需要使用 echo
或 printf
。
NEW_VARIABLE=$(printf '%s\n' "$OUTPUT" | sed -e 's/.*\#//' | cut -d ' ' -f 1)
当你单独将它放在命令中时,shell 将尝试将其内容作为命令执行,而不是打印它。
您也可以使用此处的字符串:
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% *}
您不需要 sed
或 cut
。使用 read
和参数扩展运算符。
read NEW_VARIABLE rest <<< "${OUTPUT##*#}"
`