用于字符串的输出
使用 echo string
命令输入 string
内容, 内容中的转义字符, 使用变量等规则参考字符串规则
echo "Hello World"
echo "\"Hello World\""
echo 'Hello World'
echo 'Hello World\"'
运行结果:
Hello World
“Hello World”
Hello World
Hello World"
使用参数 -e
可以使 echo
命令启用转义
例如: 可以使用转义进行换行或不换行操作
# 换行
echo -e "Line 1\nLine 2"
# 不换行
echo -e "Hello \c"
echo "World"
运行结果:
Line 1
Line 2
Hello World
##$ 输出到文件
使用 echo string > file
可以将字符串内容输入到文件中, file 为文件路径, 当路径表示的文件不存在时, 会自动生成文件, 当 file 为相对路径时, 相对的时执行命令的环境而不是文件所在的环境
例如: 在 /a 目录下执行 /b/test.sh, test.sh 内容为 echo "Hello World" > ./log.txt
, 执行后会生成文件 /a/log.txt 而不是 /b/log.txt
echo "Hello World" > ./log.txt
如果 file 已经存在, 输出内容将直接覆盖 file 内容
使用 反引号 ` 包裹可以在 echo 中执行一些命令
echo "当前时间: `date`"
echo "1 + 2 = `expr 1 + 2`"
运行结果:
当前时间: 2022年 2月23日 星期三 15时53分25秒 CST
1 + 2 = 3
printf
与 echo
都是对字符串进行输出的命令, print
与 echo
的不同点:
printf
可以对字符串进行格式化, 定制字符串的宽度, 对齐等printf
不会像 echo
自动添加换行符,我们可以手动添加 \nprintf
由 POSIX
标准所定义,因此使用 printf
的脚本比使用 echo
移植性好如果直接使用 printf string
会直接输出 string 内容
printf "Hello World\n"
运行结果:
Hello World
如果需要格式化输出, 则需要使用 printf format-string [arguments...]
, format-string: 为格式控制字符串, arguments: 为参数列表;
printf "%s %d\n" "Hello World" 123
格式控制字符串
控制符 | 说明 | 用法 |
---|---|---|
%s | 输出一个字符串 | %s 或 %-ns, - 表示左对齐,没有则表示右对齐, n 表示以n个字符宽显示, 如果不足则自动以空格填充,超过也会将内容全部显示出来。 |
%c | 输出一个字符 | %c, 如果对应参数是字符串, 则显示第一个字符 |
%d | 输出一个整型 | %d, 如果对应参数应该是整型或整型字符串, 否则报错, 空字符串转化为 0 |
%f | 以小数形式输出 | %f 或 %-n.mf, - 表示左对齐, n 表示显示长度, m 表示小数的位数 |
printf "%-10s %-10s\n" "Hello" "World" # 每个字符串10个字符宽度
printf "%c\n" "c"
printf "%c\n" "chart" # 只会输出 chart 的第一个字符 c
printf "%d\n" 123
printf "%d\n" "123"
printf "%d\n" "a" # 报错
printf "%f\n" 123
printf "%-10.2f %-10.2f\n" '123' 123 # 每个数字10个字符宽度并保留两位小数
运行结果:
Hello World
c
c
123
123
xxxxxxx printf: a: invalid number
0
123.000000
123.00 123.00
当参数少于格式控制符
当对应位置没有参数是, 那么就用 NULL 代替
printf "%s NULL 转字符串为 \"%s\" %c %d %f\n" "empty-test: "
运行结果:
empty-test: 0 0.000000
NULL 转化为字符串或字符显示是空字符, 转化为数字显示为 0
当参数多于格式控制符
如果参数多于格式控制符指定时, 多于参数任会按照既定格式输出, 剩余参数不够, 按照参数少于格式控制符的规则, 既为 NULL
printf "%s %s %c %d %f\n" "str1" "str2" "c" 123 123 "string"
运行结果:
str1 str2 c 123 123.000000
string 0 0.000000
上面代码相当于
printf "%s %s %c %d %f\n" "str1" "str2" "c" 123 123
printf "%s %s %c %d %f\n" "string"