gpt4 book ai didi

linux - Bash:在 printf 中格式化字符串

转载 作者:太空狗 更新时间:2023-10-29 12:01:45 25 4
gpt4 key购买 nike

这是我正在执行的脚本:

#!/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 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"

请注意“格式字符串”参数如何包含所有 $t1 和部分 $t2。您只为三种 %s 格式提供了两个参数,因此第三个留空。输出是:

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

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

关于linux - Bash:在 printf 中格式化字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32810058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com