文章首發於【陳樹義的博客園】,點擊跳轉到原文:https://www.cnblogs.com/chanshuyi/p/quick_start_of_shell_08_print_string.html
在 Shell 腳本中,我們可以使用 echo 命令或者 printf 命令來打印字符串。echo 適合用於簡單的打印,而 printf 則適用於統一縮進的復雜打印。
echo命令
在 Shell 語言中,一般使用 echo 命令來打印字符串。而 echo 命令后面跟着的字符串有好幾種形式:裸奔、單引號、雙引號。
第一種,裸奔。
所謂裸奔就是后面什么引用符號都不用加,直接寫上要輸出的字符串。
echo Hello, My Name is chenshuyi!
這種方式會直接輸出 echo 命令后的所有字符,例如上面會輸出:Hello, My Name is chenshuyi!
。但這種方式有個缺陷,就是無法輸出分號;
。因為當讀到分號的時候,程序會認為這一行代碼結束了。
echo Hello; I am chenshuyi
上面的命令的輸出結果是:
Hello
-bash: I: command not found
可以看到程序只輸出了 Hello,並把后面的I
當成了一個命令。
第二種,單引號的引用方式。
str='Hello ! My Name is chenshuyi';
echo $str
上面的語句成功輸出:Hello ! My Name is chenshuyi
。但這種方式的缺陷是無法在字符串中引用變量。
NAME="chenshuyi"
str='Hello ! My Name is $NAME';
echo $str
上面的輸出結果是:Hello ! My Name is $NAME
。可以看到我們無法打印出 NAME 變量的值。
第三種,雙引號的引用方式。
NAME="chenshuyi"
str="Hello! My Name is $NAME";
echo $str
輸出結果:Hello! My Name is chenshuyi
。可以看到在雙引號的引用方式下,我們可以成功打印出 NAME 變量的值。但是這種方式也有其缺陷,就是無法直接打印出特殊字符,需要把特殊進行轉義。
簡單地說:如果你打印的語句沒有任何變量,那么直接和特殊字符,直接裸奔也未嘗不可。但如果有一些特殊字符,那么使用單引號可能更好。如果又有特殊字符,又需要引用變量,那么只能使用雙引號了。
printf命令
使用 printf 命令可以對齊打印字符串,對於閱讀比較友好。
#!/bin/bash
# author:陳樹義
# site:www.shuyi.me
printf "%-10s %-8s %-4s\n" 姓名 年齡 存款K
printf "%-10s %-8s %-4.2f\n" 郭靖 30 52.20
printf "%-10s %-8s %-4.2f\n" 楊過 25 26.32
printf "%-10s %-8s %-4.2f\n" 郭芙 27 15.20
在這樣一個符號中%-10s
,百分號是個標識符,-
表示左對齊,數字10表示保留10位的長度,s表示其實一個字符串。
- 對應的
%-8s
表示左對齊、保留 8 位,是字符串。 - 對應的
%-4.2f
表示左對齊、保留 4 位、小數點保留兩位,是個浮點型數字。
在 printf 中的格式替代符一共有下面四個:
- d: Decimal 十進制整數
- s: String 字符串
- c: Char 字符
- f: Float 浮點