BASH:printf

时间:2015-09-27 16:17:22

标签: linux bash shell

我正在执行的脚本:

#!/bin/bash
...
function myprint() {
  cp=$1
  targetpermission=$2
  t1="RESOURCE"
  t2="Current Permission"
  t3="New Permission"
  printf "%s : %s ===> %s\n",$t1,$t2,$t3
}

myprint

预期产出:

RESOURCE : Current Permission ===> New Permission

我得到的输出:

    [abhyas_app01@localhost safeshell]$ ./test1.sh 
Permission,New : Permission ===> 
,RESOURCE,Current[abhyas_app01@localhost safeshell]$

发生了什么事?如何获得预期的输出?

PS - echo不是一个选项,因为我最终会使用%-Ns证明字符串的合理性,其中N是根据终端宽度计算的。

1 个答案:

答案 0 :(得分:3)

在shell中,printf是命令,命令参数由空格分隔,而不是逗号。

使用:

printf "%s : %s ===> %s\n" "$t1" "$t2" "$t3"

双引号也是必要的;否则Current PermissionNew Permission参数将被拆分,您将从单printf命令获得两行输出。

我注意到你的函数需要(至少)两个参数,但你没有显示那些被打印或以其他方式在函数中使用的参数。您可能需要重新审视逻辑的这一部分。

使用您当前的逻辑:

t1="RESOURCE"
t2="Current Permission"
t3="New Permission"
printf "%s : %s ===> %s\n",$t1,$t2,$t3

你真的转到printf

printf "%s : %s ===> %s\n,RESOURCE,Current" "Permission,New" "Permission"

请注意'format string'参数如何包含$t1的所有内容和$t2的一部分。您只为三种%s格式提供两个参数,因此第三个参数保留为空。输出是:

Permission,New : Permission ===> 
,RESOURCE,Current

第一行末尾有空格,第二行末尾没有换行符(因此,Current后会立即出现提示。)