我在bash中的printf
函數遇到了一些麻煩。 我寫了一個小腳本,在其上傳遞名稱和兩個字母(如「sh」,「py」,「ht」),並在名爲「name.extension」的當前工作目錄中創建一個文件。 例如,如果我執行seed test py
,將在當前工作目錄中創建一個名爲test.py
的文件,其文件名是#!/usr/bin/python3
。Printf在空格處分割一個字符串 - Bash
到目前爲止,這麼好,沒有什麼幻想:我正在學習shell腳本,我認爲這可能是一個簡單的練習來測試迄今獲得的知識。 問題是當我想創建一個HTML文件。這是我使用的功能:
creaHtml(){
head='<!--DOCTYPE html-->\n<html>\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t</head>\n\t<body>\n\t</body>\n</html>'
percorso=$CARTELLA_CORRENTE/$NOME_FILE.html
printf $head>>$percorso
chmod 755 $percorso
}
如果我運行,例如,seed test ht
正確的函數(creaHtml
)被調用時,將創建test.html
但如果我嘗試尋找到它,我只看到:
<!--DOCTYPE
沒有別的。 這是該功能的跟蹤:
[sviluppo:~/bin]$ seed test ht
+ creaHtml
+ head='<!--DOCTYPE html-->\n<html>\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t</head>\n\t<body>\n\t</body>\n</html>'
+ percorso=/home/sviluppo/bin/test.html
+ printf '<!--DOCTYPE' 'html-->\n<html>\n\t<head>\n\t\t<meta' 'charset=\"UTF-8\">\n\t</head>\n\t<body>\n\t</body>\n</html>'
+ chmod 755 /home/sviluppo/bin/test.html
+ set +x
但是,如果我嘗試從終端運行printf '<!--DOCTYPE html-->\n<html>\n\t<head>\n\t\t<meta charset=\"UTF-8\">\n\t</head>\n\t<body>\n\t</body>\n</html>'
,我看到正確的輸出:在與縮進,一切都整齊地顯示一個HTML文件的「骨架」。我在這裏錯過了什麼?
基本上,引用你的變量。不要使用'echo -e',因爲它是非標準的。當你添加引號時,'printf'會做你想要的。 –
只要非常確定,我在引用變量時必須加雙引號,比如'printf「$ var1」',對不對? –
雙引號將評估裏面的變量。單引號是不會被評估的文字。 – e0k