小编use*_*434的帖子

bash printf:忽略参数或按索引访问?

我有一个 bash 函数,它获取值(使用 curl 和 cut)并从中创建一个文件名。现在我想支持需要一组不同参数的第二个命名方案。

例子:

#!/bin/bash

TEMPLATE="%02i. %s.txt"

foo() {
    a="Imagine these to"
    b="be set dynamically"
    c="42"

    filename="$(printf "$TEMPLATE" "$c" "$a")"
    # second: filename="$a - $b.txt"
    # or:     filename="$(printf "%s - %s.txt" "$a" "$b")"
    echo "$filename"
    # generate file
}

# actual script loops over:
foo
Run Code Online (Sandbox Code Playgroud)

其中一个值是一个数字,如果需要,应该用前导零填充,因此printf在当前实现中。

有没有办法通过全局设置不同的模板来实现这一点?这将要求模板可以通过索引访问参数或至少跳过其中的一些参数。

如果没有,我的选择是什么?模板由命令行参数选择,初始化后不改变。

什么不起作用:

  • bash 手册页建议零长度输出是不可能的(跳过值)
  • C 的 printf 手册页提到了一个 "%m$" 构造,它显然在 bash 中不受支持
  • 函数本身生成值,所以它不能接收完整的文件名作为参数

bash printf

1
推荐指数
1
解决办法
1588
查看次数

标签 统计

bash ×1

printf ×1