2015-11-09 124 views
0

我需要讀取文件並按照原樣打印大部分行。我這樣做,像這樣:Bash:如何打印字符串/ *

while read line; do 
    do stuff if line meets requirements 
    otherwise print it as is to output file like so: 
    echo $line >> $ 
done <<< "$(cat "$SOURCE_TESTBENCH")" 

問題是一些行包含這樣的東西線

/* // From testbench 

這是打印出來的/文件夾列表。果然這個簡單的代碼片段不起作用:

line=/* 
echo $line 

除了打印/ *喜歡我想它,它打印的目錄列表。

如何才能打印讀取的行就像它在原始文件上一樣?

+3

在變量周圍使用雙引號:'echo「$ line」'。 –

+0

你試過了,'echo'$ line「'? – lurker

+0

我以爲我有。很顯然,我做了一些錯誤的事情,因爲這解決了我的問題。謝謝。你們其中一人應該將其作爲回答發佈,以便我可以接受。 – aarelovich

回答

2

快速指南:

  • echo $var應該打印出來有什麼變化

  • echo '$var'內將打印出究竟什麼是單​​引號內

  • echo "$var"會打印出到底發生了包含在變量內部(不執行它)

但是,未加引號的樣式echo $var文件名擴展和分詞的影響,而echo "$var"會對此進行抑制。

因此,您的需求,絕對是echo "$var"將是安全的。

+3

'echo $ var'不會執行var – jayant

+0

中的內容我的錯誤...編輯過多。我不知道是什麼觸發了打印目錄列表。 –

+2

您需要查看http://www.gnu.org/software/bash/manual/bashref.html#Shell-Expansions - 參數展開後,未加引號的值將受到分詞的影響,特別是與此處相關的文件名擴張。 –

3

要打印包含可變的內容的字符串,使用printf

printf '%s\n' "$line" 

\n附加一個新行,這當然是可選的。

有關參數擴展的常用規則適用。總是在變量周圍使用雙引號。