2013-08-18 181 views
1

當我運行命令:bash命令輸出改變時存儲在一個變量

git lg --since="24 hours ago" | tail -1

我得到預期的結果:

* f71da17 - blah blah blah (12 hours ago)

然而,當我保存這個輸出一個變量並將其回顯到控制檯:

last_commit=$(git lg --since="24 hours ago" | tail -1); echo $last_commit

我得到的意想不到的結果:

dir1/ dir2/ dir3/ file1 file2 file3 * f71da17 - blah blah blah (12 hours ago)

它預先考慮在當前目錄到輸出的每個文件。任何有關發生什麼事的洞察力將非常感謝!

+0

的'git'命令實際上是一組周圍'git'並用以下'git'所述特定命令結束的命令。 'git lg'是什麼意思? – abiessu

回答

4

變量的值中的*正在循環擴展,因爲您沒有引用擴展。

使用echo "$last_commit"

+0

雖然,我可能會把這些報價放在作業中。 – Dru

+0

@Dru:那不會幫助;無論如何,作業不會經歷分詞或路徑名擴展,因此引號是不必要的。 – rici

+0

來自bash手冊頁,「如果[過程]替換出現在雙引號內,則不會對結果執行單詞分割和文件名擴展。」所以,如果沒有用雙引號括起來...... – Dru

相關問題