2013-07-30 51 views
1

我有一個奇怪的情況。我試圖從文件中剪切一些信息,當我直接將命令直接運行到終端中時,一切正常,但只要我在腳本中將其變爲一個變量,它就會返回它應該剪切的內容以及文件在當前目錄中。切不起作爲變量

cat query.sql | cut -d':' -f3,4 

作品,但...

QUERY_SQL="query.sql" 
MYSQL_COMMAND=`cat $QUERY_SQL | cut -d':' -f3,4` 
echo $MYSQL_COMMAND 

返回上述奇怪的輸出。 我在做什麼錯?

編輯: 查詢文件看起來是這樣的......

[email protected]:3:SQL CODE 
+0

'echo $ QUERY_SQL'做它應該做什麼? – che

+0

是的它確實..只是變化的是他們現在的變量 – arynhard

+0

@anubhava同樣的輸出 – arynhard

回答

3

我懷疑在MYSQL_COMMAND內容的東西被解釋爲一個文件名glob模式。嘗試改變

MYSQL_COMMAND=`cat $QUERY_SQL | cut -d':' -f3,4` 
echo $MYSQL_COMMAND 

MYSQL_COMMAND="$(cut -d: -f3,4 < "$QUERY_SQL")" 
printf '%s\n' "$MYSQL_COMMAND" 

殼最佳防守編碼的做法是把雙引號變量替換,除非你知道一個事實,,你需要分詞和水珠擴張發生在特定的替代之後。將echo更改爲printf '%s\n'可避免相關的一組問題。我永遠不會記得你是否真的需要在變量賦值中圍繞$(...)加雙引號,所以我把它們放在了安全的地方。

+0

這很有效......感謝您的建議,您只是幫助我在shell腳本中更好一點! – arynhard

+1

順便說一下,它在'$(cut -d:-f3,4 <「$ QUERY_SQL」)周圍沒有雙引號, – arynhard