bash - 为命令格式化 bash 变量

标签 bash shell

我想在我的 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/

相关文章:

bash - 如何将包含斜杠的变量传递给 sed

android - 从python输入adb shell

bash - 为什么 shell 变量在给命令加上前缀时会变成环境变量?

linux - 根据列中的值有条件地复制表格数据文件的行

c - 输入 EOF 时 Shell 无限循环 C

java - 如何使用 bash 在一个 jar 中执行多个 java 类文件

bash - 从同一脚本杀死其他 bash 守护进程

c++ - 如何将命令从 C++ 应用程序返回到父终端?

linux - 使用脚本编辑文件中的文本

linux - 如何在 bash 脚本中切换到和退出 root