使用 printf 格式化字符串

问题描述 投票:0回答:1

这是我正在执行的脚本:

#!/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 是根据终端宽度计算的。

linux bash shell
1个回答
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"

请注意“格式字符串”参数如何包含全部

$t1
和部分
$t2
。 您仅为三种
%s
格式提供两个参数,因此第三个参数留空。 输出是:

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

第一行末尾有一个空格,第二行末尾没有换行符(因此您的提示会立即出现在

Current
之后)。

© www.soinside.com 2019 - 2024. All rights reserved.