在命令行工具中打印编号参数

在命令行工具中打印编号参数

是否有显示命令行参数的打包程序?我经常发现让用户运行这种类型的程序很有帮助,既可以帮助他们了解 shell 命令的作用,也可以获得更清晰、更明确的反馈(例如,当我看不到他们的屏幕并且我们正在使用粘贴网站进行在线交流时)。

我已经用 Python 编写了下面的脚本,它可以运行,但我发现告诉人们他们可以获取一个 Ubuntu 包比解释如何写入文件、chmod +x如何更改他们的系统(例如,也许他们没有~/bin在 PATH 中设置,...)更容易。

我很高兴看到一个命令行sed/awk/perl/etc.脚本也能实现这个功能,即使它很丑陋。(“如果”……在一行中执行此操作将要很丑。

任何解决方案都需要具有与该脚本有些类似的结果;用英语来说:用数字打印每个参数(转义有问题的字符只是一个奖励)。

#!/usr/bin/env python2.6
import sys

if len(sys.argv) == 1:
  print "No args!"
else:
  args = enumerate(sys.argv)
  args.next()  # skip program name
  for i, v in args:
    r = repr(v)
    if v.strip() != v or v != r[1:-1]:
      v = r + "\t(repr)"
    print "%3d: %s" % (i, v)

答案1

我的解决方案(您已经知道;)作为一个函数(不需要处理 PATH)成为一行:

showargs() { i=1; for f; do printf "arg%d: <%s>\n" $i "$f"; ((i++)); done; }

答案2

这在 Bash 中特别容易且有用。 IBM 的本指南演示了 $@、$#、$1、$2 等的使用方法,并且有一个很好的 testargs.sh 脚本(参见清单 7 和 8),它可以完成您正在寻找的事情:它向用户显示他们输入的参数和选项。

相关内容