藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教:一個Here Document的問題(已解決不是人家Here Document的問題)

var=$(
cat <<\Endofmessage

Hello, there, $NAME.
Greetings to you, $NAME, from $RESPONDENT.


Endofmessage
)

echo "$var"
echo ----------------------

執行之後: 發現兩個空行丟了,為什麼?怎麼解決(空行裡不能加東西)
[root@142 work]# sh kkk.sh

Hello, there, $NAME.
Greetings to you, $NAME, from $RESPONDENT.
----------------------


因為回車後面沒東西了~ ^_^

-->
回車本身也是東西嘛

也就是說$() / ``的賦值方法會把最後的\n不當東西?以前還真沒注意過。
[color=Blue]那就不是Here Document的問題了。[/color]
還是用我的單引號算了
[color=Blue]var='

'[/color]


-->

最後連續的\n都不算,就是這麼規定的

就那個最簡單的說事兒吧?

echo aa
在bash中這個命令最後也會產生一個\n對麼?我們不想讓它產生\n時會用 echo -n aa

var=$(echo aa)
echo -n "$var"

echo出來最後的\n是不是沒了

你的cat不過是3個\n,比1多了倆而已


改一下:
var() {
cat <<\Endofmessage

Hello, there, $NAME.
Greetings to you, $NAME, from $RESPONDENT.


Endofmessage
}

var
echo ----------------------

-->
謝謝大家!我原本是想在腳本裡這樣:
......
ssh $REMOTE_HOST "echo $var >new.sh"
ssh $REMOTE_HOST "sh new.sh&"
......
結果發現new.sh裡後面的空行都沒了,所以有此一問。^o^
已經改用' '了。

呵呵,這個不是Heredocument的問題,也不是echo的問題。實際上是命令替換(command substituion)的規定 -- 被替換的命令所輸出的末尾出現的所有換行都會被忽略。既然是這麼規定的,也就沒什麼條件好講,你可以選擇不用命令替換。^_^

-->
你說的對,標題應該改一下了。



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com