2015-09-04 36 views
-1

一些相关的问题接近,但不直接回答我的问题。我试图设置一个变量,它有一个附加的sed命令给一个新的变量。我试过的:如何设置一个变量与修改行为在bash中的另一个变量?

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

我们需要采样输入,和预期输出有所帮助。祝你好运。 – shellter

回答

2

为了将变量传送到命令,您需要使用echoprintf

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% *} 
+0

非常感谢!我不知道内置的运营商。很有帮助。 – jalyper

1

你不需要sedcut为了这。使用read和参数扩展操作符。

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

`

+0

感谢您的支持 – jalyper

相关问题