我在文件中包含以下命令的文件。雙倍空間被自動替換爲單個
#!/bin/csh -f
echo "test test" //echo test [dobule space] test
set a = "test test" //set a = test [dobule space] test
echo $a
輸出如下。
測試[dobule空間]測試
測試[空格]測試
如何雙空間得到用一個空格代替,當我設定值的?
任何幫助表示讚賞。
我在文件中包含以下命令的文件。雙倍空間被自動替換爲單個
#!/bin/csh -f
echo "test test" //echo test [dobule space] test
set a = "test test" //set a = test [dobule space] test
echo $a
輸出如下。
測試[dobule空間]測試
測試[空格]測試
如何雙空間得到用一個空格代替,當我設定值的?
任何幫助表示讚賞。
當我將值設置爲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"
在bash
中,命令行上任何空白字符的運行默認爲r除非價值被引用,否則由單個空間替換。
的bash
man page告訴這一點,但在一個非常迂迴的方式:
「引用」部分:
圍護字符用單引號保留引號內的每個字符的字面意義。
用雙引號括起來的字符保留了引號中所有字符的字面值,除了$,`,\和,當啓用歷史擴展時,!
...這意味着空白字符!因爲,事實證明,他們是「特殊」:
「字拆分」部分:
如果IFS沒有設置,或者它的值是完全
<space><tab><newline>
,默認值,然後<space>
序列,<tab>
和<newline>
在開始和以前擴張的結果最終會被忽略,而不是在一開始的IFS字符的任意序列或端部用於分隔單詞。
是的,沒有注意到.. –
@AvinashRaj這是因爲一個誤導性的標題。修正了。 –
@ivan_pozdeev這是因爲你沒有正確地閱讀這個問題。與標題無關。 – arco444