首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有特定格式字符串的printf快捷命令

具有特定格式字符串的printf快捷命令
EN

Unix & Linux用户
提问于 2021-11-26 03:39:25
回答 2查看 344关注 0票数 1

我想为printf使用一个具有特定格式字符串的快捷命令,并提出以下内容。

代码语言:javascript
复制
local PF="printf %s\n"
$PF "Some Text"

它做了这项工作,但不知道在使用这种方法时是否存在任何警告,这可能导致对格式字符串的错误解释。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2021-11-26 04:19:50

  1. 当您可以使用一个函数时,为什么要执行一个变量的值--这就是它们的用途。PF() { printf "%s\n“"$@”;} PF“一些文本”或别名:别名PF='printf“%S\n”PF“”一些文本“
  2. 如果您确实希望包含一个变量,请使用它来保存格式字符串。例如,fmt="%s\n“printf "$fmt”"Some“,如果要将行长度保持在80个字符以下,那么在两个或多个语句中分配变量。例如fmt=“......part1.”Fmt+=“......part2.”Fmt+=“......part3.”如果您只想使赋值格式字符串更具可读性,或者添加有关部分或所有部分的单独注释,则这也非常有用。
票数 5
EN

Unix & Linux用户

发布于 2021-11-26 08:34:38

列表上下文中的$PF正在调用split+glob。$PF的内容根据涉及$IFS特殊参数的复杂规则拆分(例如,这些参数与bash解释printf %s\n代码时发生的情况无关),然后产生的单词将受到文件名生成(又名扩展,又名全局)的限制。

因此,这里至少有两个问题:

  1. $PF的行为取决于$IFS的当前值。默认情况下,在bash中,$IFS包含空格、制表符和换行符,在这里您确实希望在空间上拆分$PF,否则字符串不包含制表符或换行符。但是,例如,在将$IFS更改为%的上下文中,您将以"s\n"作为参数来运行"printf "命令。
  2. 在bash的某些版本中(即5.0,我相信它在5.1中被恢复),\是一个全局运算符(至少像这里一样,它来自于某些参数展开,而不是用于引用)。在打开failglobnullglob选项时,这意味着:$ PF='printf %s\n‘bash-5.0 -O failglob -c '$PF test’bash-5.0:不匹配:%s\n $ PF='printf %x\n‘bash\n’bash-5.0 -O nullglob -c '$PF测试%d‘test0,即使没有这些选项:$ PF='printf %\n’bash-5.0 -c '$PF test‘test $sn$ PF='printf %PF=’printf%‘bash-5.0 -c '$PF测试’testn

有关要做什么,请参阅@cas的好答案

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/679131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档