这是我正在执行的脚本:
#!/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 是根据终端宽度计算的。
在 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"
请注意“格式字符串”参数如何包含全部
$t1
和部分 $t2
。 您仅为三种 %s
格式提供两个参数,因此第三个参数留空。 输出是:
Permission,New : Permission ===>
,RESOURCE,Current
第一行末尾有一个空格,第二行末尾没有换行符(因此您的提示会立即出现在
Current
之后)。