我想在我的 bash shell 中使用不同的编号参数调用程序 n 次,该参数必须采用固定格式,如“%02i”
一种方法是:
for ((i=23; i<42;i++)); do
sh ../myprogram `printf "%02i\n" $i`
done
有没有办法改进 printf..
部分?我认为这可能是文件更多的性能瓶颈,并且使该行的可读性不如内置函数(尤其是当压缩为一行时)。
最佳答案
在 Bash 中,printf
由 shell 提供(参见 the bash(1) manpage,搜索“printf”),因此您甚至没有 fork( )
和 exec()
来执行一个单独的命令——除非你从反引号中运行它。 Bash 的内置 printf 允许您使用 -v
参数将输出分配给给定变量;您的脚本片段可以重写为:
for ((i=23; i<42;i++)); do
printf -v ii "%02i\n" $i
sh ../myprogram $ii
done
我不确定我是否认为它比原来的更具可读性。
脚本片段中资源最密集的部分是调用其他 shell 脚本;我不会担心调用 printf 的开销,除非有进一步的证据表明并非如此。
编辑以添加反引号和直接执行之间的区别
关于bash - 为命令格式化 bash 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/458972/