我有一个 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
其中一个值是一个数字,如果需要,应该用前导零填充,因此printf
在当前实现中。
有没有办法通过全局设置不同的模板来实现这一点?这将要求模板可以按索引访问参数或至少跳过其中一些参数。
如果没有,我的替代方案是什么?模板由命令行参数选择,初始化后不改变。
什么不起作用:
- bash 手册页建议不可能输出零长度(跳过值)
- C 的 printf 手册页提到了一个 "%m$" 构造,显然 bash 不支持它
- 函数本身生成值,因此它无法接收完整的文件名作为参数