官术网_书友最值得收藏!

The printf command

The printf command works like echo, except the first argument you provide to it is a format string:

$ printf '%s\n' 'Hello!'
Hello!

Notice that we had to put the format string in single quotes, to prevent the backslash from having special meaning to the shell. Notice also that we didn't have to use double quotes to get the newline from \n; the printf command did that for us.

You can use printf in much the same way you would use a printf() function in other languages, such as C. It supports most of the same format specifications as the printf(1) system command; you can type man 1 printf to see a list.

It's easier to print tricky strings with printf, where echo might struggle:

$ printf '%s\n' -n
-n
$ string=-n
$ printf '%s\n' "$string"
-n

You should always choose printf over echo in scripts, even though it's a little more typing.

Be careful with what you put into a format string; a variable with a value provided by the user can be a security hole! It's best to use only fixed format strings, or carefully build them yourself.

printf also has a useful property where it will repeat the format string as necessary for each argument you provide it. This is a convenient way to print a list of arguments on individual lines:

$ printf '%s\n' foo bar baz
foo
bar
baz

Note that we got three instances of the string-newline pattern from one format string.

Finally, Bash's printf has a %q pattern that can be used to quote special characters in a string with backslashes, so it can be reused safely in the shell. If you follow good quoting practices, you are unlikely to need this a lot in Bash, but it's useful to know it's there:

bash$ printf '%q\n' 'Watch out for thi$ $tring; it \has\ nasty character$!'
Watch\ out\ for\ thi\$\ \$tring\;\ it\ \\has\\\ nasty\ character\$\!
主站蜘蛛池模板: 平阴县| 荔浦县| 霍林郭勒市| 连州市| 左权县| 孟津县| 垣曲县| 临武县| 临沂市| 西吉县| 阳山县| 日喀则市| 车险| 通化市| 龙里县| 尼勒克县| 潍坊市| 麻城市| 阳江市| 聂荣县| 酉阳| 诏安县| 蒙阴县| 通河县| 中超| 翼城县| 南靖县| 玛多县| 正宁县| 纳雍县| 新郑市| 福建省| 松溪县| 定州市| 塔城市| 成都市| 华坪县| 弋阳县| 灵台县| 天水市| 探索|