如何在bash printf中逃避一系列反斜杠?

时间:2015-07-04 19:22:12

标签: string bash escaping backslash

以下脚本产生了意外的输出:

 public BaseDao<Department, int>  GetDepartmentRepository()
    {
       return new BaseDao<Department, int>();


    }

在Ubuntu 14下作为bash脚本运行,我看到了:

printf "escaped slash: \\ \n"
printf "2 escaped slashes: \\\\ \n"
printf "3 escaped slashes: \\\\\\ \n"
printf "4 escaped slashes: \\\\\\\\ \n"

错误.. 什么?

2 个答案:

答案 0 :(得分:5)

假设printf FORMAT字符串被双引号括起来,printf需要一个额外的扩展级别,与echo(两者都是shell内置命令)。

您对printf的期望实际上可以使用单引号实现:

printf '1 escaped slash:   \\ \n'
printf '2 escaped slashes: \\\\ \n'
printf '3 escaped slashes: \\\\\\ \n'
printf '4 escaped slashes: \\\\\\\\ \n'

输出:

1 escaped slash:   \
2 escaped slashes: \\
3 escaped slashes: \\\
4 escaped slashes: \\\\

答案 1 :(得分:3)

printf是一个内置的bash。看看help printf

printf [-v var] format [arguments]
      Formats and prints ARGUMENTS under control of the FORMAT.

您应该传递格式和参数。所以在参数之前添加格式"%s\n"

printf "%s\n" "escaped slash: \\"
printf "%s\n" "2 escaped slashes: \\\\"
printf "%s\n" "3 escaped slashes: \\\\\\"
printf "%s\n" "4 escaped slashes: \\\\\\\\"

输出:

escaped slash: \ 
2 escaped slashes: \\ 
3 escaped slashes: \\\ 
4 escaped slashes: \\\\