2015-01-16 17 views
3

我在文件中包含以下命令的文件。雙倍空間被自動替換爲單個

#!/bin/csh -f 
echo "test test" //echo test [dobule space] test 
set a = "test test" //set a = test [dobule space] test 
echo $a 

輸出如下。

測試[dobule空間]測試

測試[空格]測試

如何雙空間得到用一個空格代替,當我設定值的?

任何幫助表示讚賞。

+0

是的,沒有注意到.. –

+0

@AvinashRaj這是因爲一個誤導性的標題。修正了。 –

+1

@ivan_pozdeev這是因爲你沒有正確地閱讀這個問題。與標題無關。 – arco444

回答

6

當我將值設置爲a時,雙空間如何被單個空間替換?

不,它不會被單個空間取代。這是因爲你沒有在你的echo中使用引號。使用:

echo "$a" 

得到雙倍間隔的字符串。

默認情況下,如果不引用變量,Shell默認會將多個空格修剪成單個空格。即使這將是空單:

s='a  b' 
echo $s 
a b 

但隨着行情:

echo "$s" 
a  b 

編輯:基於評論下面你可以做到這一點在csh:

set QUERY = "select p.path from path p, file f where p.pathid=f.pathid and f.fileid=1234" 
set dir = "`/usr/etc/venture/bin/mysql -BN -uroot -***** ****-e '$QUERY'`" 
echo "$dir" 
+0

嗨Anubhava,它沒有工作。 – Roni

+0

嘗試過。但它是一個錯誤。 :(。其他方式? – Roni

+0

它不是一個錯誤,讓我加上這個問題。 – anubhava

0

bash中,命令行上任何空白字符的運行默認爲r除非價值被引用,否則由單個空間替換。

bash man page告訴這一點,但在一個非常迂迴的方式:

「引用」部分:

圍護字符用單引號保留引號內的每個字符的字面意義。

用雙引號括起來的字符保留了引號中所有字符的字面值,除了$,`,\和,當啓用歷史擴展時,!

...這意味着空白字符!因爲,事實證明,他們是「特殊」:

「字拆分」部分:

如果IFS沒有設置,或者它的值是完全<space><tab><newline>,默認值,然後<space>序列,<tab><newline>在開始和以前擴張的結果最終會被忽略,而不是在一開始的IFS字符的任意序列或端部用於分隔單詞。

+2

但是這是csh不是BASH – anubhava

+0

還有人寫在'csh'嗎? I意思是說,使用'csh'非常少見,根本沒有被強調,因此我不知所措 –

+0

'csh'在問號標籤和OP代碼片段中的shebang中都被指定OP – arco444