2015-09-04 35 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

相關問題