首页 » SEO优化 » php敕令行打印技巧_Shell脚本之终端打印

php敕令行打印技巧_Shell脚本之终端打印

访客 2024-11-10 0

扫一扫用手机浏览

文章目录 [+]

$ echo "Hello world"Hello world$ echo 'Hello world'Hello world$ echo Hello worldHello world

这些方法看起来相似,但各有一些分外用场和副浸染。
如下面这行命令:

$ echo Hello world!Hello world!$ echo 'Hello world!'Hello world!$ echo "Hello world!"-bash: !": event not found

这是由于 H - histexpand 模式打开了导致。
命令行下,双引号里面用了 ! 的话,Shell 会以为要实行历史展开,从而导致报错。

php敕令行打印技巧_Shell脚本之终端打印

办理方法:(set +H关闭histexpand)

php敕令行打印技巧_Shell脚本之终端打印
(图片来自网络侵删)

$ echo $-himBH$ set +H$ echo $-himB$ echo "Hello world!"

在echo中利用带双引号的文本时,该当在echo之前利用set +H,以便能够正常利用。

每种方法的副浸染:

利用不带引号的echo时,没法在所要显示的文本中利用,由于在bash shell中被用作命令定界符。
以echo hello;hello为例,echo hello被视为一个命令,第二个hello则被视为另一个命令。
利用带单引号的echo时,Bash不会对单引号中的变量(如$var)求值,而只是照原样显示。

这意味着:$ echo '$var'将会返回 $var,而$ echo $var将会根据变量$var定义与否,返回其值,或者什么都不返回。

显示转义字符

在默认情形下,echo会将一个换行符追加到输出文本的尾部。
可以利用标志-n或转义字符\c来忽略结尾的换行符。

如果须要利用转义序列,则采取echo -e "包含转义序列的字符串"这种形式。
例如:

xx:~ xx$ echo -n "Hello world "Hello world xx:~ xx$xx:~ xx$ echo "1\t2\t3"1\t2\t3xx:~ xx$ echo -e "1\t2\t3"1 2 3xx:~ xx$ echo -e "Hello world \c"Hello world xx:~ xx$

二. printf命令

printf命令模拟C程序库中的printf(),利用的参数和C措辞中的printf函数一样。
例如:

$ printf "Hello world\n"

在默认情形下,printf并不像echo命令一样会自动添加换行符,必须在须要的时候手动添加,如上Hello world后面添加\n,如下面的脚本:

#!/bin/bash#文件名:printf.shprintf "%-5s %-10s %-4s\n" No Name Maskprintf "%-5s %-10s %-4.2f\n" 1 Zhangsan 87.54323printf "%-5s %-10s %-4.2f\n" 2 Lisi 90.04432printf "%-5s %-10s %-4.2f\n" 3 Wangwu 89.527

我们会得到如下格式的输出:

No Name Mask1 Zhangsan 87.542 Lisi 90.043 Wangwu 89.53

%s、%c、%d和%f都是格式替代符(format substitution character),其所对应的参数可以置于带引号的格式字符串之后。

%-5s指明了一个格式为左对齐且宽度为5的字符串替代(-表示左对齐)。
如果不用-指定对齐办法,字符串将采取右对齐办法。

对Name而言,保留宽度是10,其内容都会被显示在10字符宽的保留区域内,如不敷10字符,则用空格符添补。

对付Mark字段,我们将其格式化为%-4.2f,个中.2指定保留2位小数位。

三. 补充内容

须要把稳的是:

echo和printf中的标志(如-e -n等)该当涌如今命令行内任何字符串之前,否则Bash会将其视为其余一个字符串。

标签:

相关文章