Bash中的换行
换行在平常的shell编程中是经常遇到的,但是有时也会忽略掉一些问题。本篇中将会介绍多种方式实现输出换行的方法。
使用 echoecho 自带换行echo 命令输出字符串,在最后后会添加一个换行
123root@Michael:~# echo hello worldhello worldroot@Michael:~#
添加 -n 可以禁用echo最后的换行
12root@Michael:~# echo -n hello worldhello worldroot@Michael:~#
换行符”\n”但是当我们使用bash执行以下命令时,发现它并没有换行
123root@Michael:~# bash -c "echo \"\n\""\nroot@Michael:~#
而是需要加一个 -e
1234root@Michael:~# bash -c "echo -e \"\n\""root@Michael:~#
从echo的说明中可以看到 -e 指的是让转义符生效,其中有:
12345678910111213If -e is in effect, the following sequences are recognized: \\ backslash \a alert (BEL) \b backspace \c produce no further output \e escape \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \0NNN byte with octal value NNN (1 to 3 digits) \xHH byte with hexadecimal value HH (1 to 2 digits)
另外可以在字符串前加 $ 符号
1234root@Michael:~# echo $'hello\nworld'helloworldroot@Michael:~#
使用echo多行模式上例子
1234567root@Michael:~# echo """helloworld"""helloworldroot@Michael:~#
使用”””符号,包裹着多行字符串,实现多行输出。但是这种方式有个问题,即当字符串中存在变量时,会将变量先进行解析,如
1234567echo """hello$hello"""helloroot@Michael:~#
而有的时候我们希望是保留原始字符串$hello。这时可以在变量$前加上转义符$
1234567root@Michael:~# echo """hello\$hello"""hello$helloroot@Michael:~#
也可以使用三个单引号’’’替换三个双引号”””
1234567root@Michael:~# echo '''hello> $hello> '''hello$helloroot@Michael:~#
使用cat命令输出多行123456root@Michael:~# cat <
与echo一样,如果字符串中存在变量,该方式同样会解析变量。这时可以在第一个EOF两边添加引号,如
1234567root@Michael:~# cat <<'EOF'$helloworldEOF$helloworldroot@Michael:~#
使用printf使用printf打印字符串中的\n换行符,单引号,双引号均可
1234567root@Michael:~# printf "hello\nworld\n"helloworldroot@Michael:~# printf 'hello\nworld\n'helloworldroot@Michael:~#
对于变量问题,与echo一样,可以为$添加转义符\$, 或者使用单引号。如:
1234root@Michael:~# printf 'hello \n$hello\n'hello $helloroot@Michael:~#