假设我有一个带有两个可选参数的bash脚本
我如何能够运行为第二个参数提供输入的脚本,而不是第一个参数?
答案 0 :(得分:4)
shell的参数列表只是一个字符串序列。没有办法让第一个字符串未定义,第二个字符串被定义,但是如果您可以控制程序,或者编写它的人预计这个场景,也许它支持传入一个空的第一个参数,或者可能是特定字符串,解释为“未定义”。
要传入一个空字符串,shell允许您放置两个相邻的引号(在将参数传递给您正在运行的程序之前,它将被shell删除,以便shell如何处理引号一般而言。
program '' second third fourth
一个常见的相关约定是让单个或双点划线表示“一个不是选项的选项”。
program -- second third fourth
如果您可以控制命令及其参数处理(并且由于您有其他人编写的程序依赖于当前行为而没有巩固它),更好的设计是使可选参数真正可选,即使第一个参数成为破折号选项。
program --uppercase string of arguments
program --lowercase STRING OF SHOUTING
program The arguments will be passed through WITHOUT case conversion
实施很简单:
toupper () { tr '[:lower:]' '[:upper:]'; }
tolower () { tr '[:upper:]' '[:lower:]'; }
case $1 in
--uppercase) shift; toupper;;
--lowercase) shift; tolower;;
*) cat;;
esac <<<"$@"
如果行为是,那么前进的方法是创建一个具有不同名称且具有相同核心行为但具有更好命令行语义的命令,并最终逐步淘汰旧版本笨拙的论证处理。