我正在执行的脚本:
#!/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是根据终端宽度计算的。
答案 0 :(得分:3)
在shell中,printf
是命令,命令参数由空格分隔,而不是逗号。
使用:
printf "%s : %s ===> %s\n" "$t1" "$t2" "$t3"
双引号也是必要的;否则Current Permission
和New 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
后会立即出现提示。)