我正在尝试在shell中使用printf
化字符串,我将从文件中获取输入字符串,其中包含%,',"",,\user, \tan
等特殊字符。
如何转义输入字符串中的特殊字符?
埃格
#!/bin/bash
#
string='';
function GET_LINES() {
string+="The path to K:\Users\ca, this is good";
string+="\n";
string+="The second line";
string+="\t";
string+="123"
string+="\n";
string+="It also has to be 100% nice than %99";
printf "$string";
}
GET_LINES;
我期待这将打印在我想要的格式一样
The path to K:\Users\ca, this is good
The second line 123
It also has to be 100% nice than %99
但它会产生意想不到的结果
./script: line 14: printf: missing unicode digit for \U
The path to K:\Users\ca, this is good
The second line 123
./script: line 14: printf: `%99': missing format character
It also has to be 100ice than
那么我怎样才能在打印的时候去掉特殊字符呢?echo -e
也有这个问题。
4条答案
按热度按时间jgzswidk1#
试试看
参见printf(1)
nukf8bse2#
请允许我指出,“man printf”清楚地表明,“%”字符必须通过另一个“%”进行转义,因此printf“%%”将导致单个“%”
eivnm1vs3#
为了方便那些在Google搜索"bash printf escaped"后通过单击第一个搜索结果到达此处的人,printf使用
%q
化程序来生成bash转义的文本。例如:
从
man printf
开始:njthzxwz4#
你可以使用
$' '
来包含换行符和制表符,然后一个普通的echo
就足够了:我还对脚本做了一些其他的小改动。除了将FUNCTION_NAME小写之外,我还使用了更广泛兼容的函数语法。在这种情况下,没有太多的优势(因为
$' '
字符串是bash的扩展),但据我所知,没有理由使用function func()
语法。string
的作用域也可以是使用它的函数的局部,所以我也修改了它。输出: