运行bash脚本时如何跳过第一个参数?

运行bash脚本时如何跳过第一个参数?,bash,unix,Bash,Unix,假设我有一个带有两个可选参数的bash脚本 如何运行为第二个参数而不是第一个参数提供输入的脚本?shell的参数列表只是一个字符串序列。第一个字符串无法定义,第二个字符串无法定义,但是如果您控制了程序,或者编写程序的人预期会出现这种情况,那么可能它支持传入一个空的第一个参数,或者可能是一个解释为“未定义”的特定字符串 为了传递一个空字符串,shell允许您放置两个相邻的引号(在参数传递给正在运行的程序之前,shell将删除这两个引号,这通常是通过shell处理引号的方式实现的) 一个常见的相关惯

假设我有一个带有两个可选参数的bash脚本


如何运行为第二个参数而不是第一个参数提供输入的脚本?

shell的参数列表只是一个字符串序列。第一个字符串无法定义,第二个字符串无法定义,但是如果您控制了程序,或者编写程序的人预期会出现这种情况,那么可能它支持传入一个空的第一个参数,或者可能是一个解释为“未定义”的特定字符串

为了传递一个空字符串,shell允许您放置两个相邻的引号(在参数传递给正在运行的程序之前,shell将删除这两个引号,这通常是通过shell处理引号的方式实现的)

一个常见的相关惯例是让单破折号或双破折号表示“一个不是选项的选项”

如果您可以控制命令及其参数处理(由于您有依赖于当前行为的其他人编写的程序,因此尚未巩固),则更好的设计是使可选参数真正可选,即可能使第一个参数成为破折号选项

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 <<<"$@"
toupper(){tr'[:lower:''[:upper:'';}
tolower(){tr'[:upper:''[:lower:'';}
每箱1元
--(大写)移位;图珀;;
--(小写)移位;托洛尔;;
*)猫;;

esacshell的参数列表只是一个字符串序列。第一个字符串无法定义,第二个字符串无法定义,但是如果您控制了程序,或者编写程序的人预期会出现这种情况,那么可能它支持传入一个空的第一个参数,或者可能是一个解释为“未定义”的特定字符串

为了传递一个空字符串,shell允许您放置两个相邻的引号(在参数传递给正在运行的程序之前,shell将删除这两个引号,这通常是通过shell处理引号的方式实现的)

一个常见的相关惯例是让单破折号或双破折号表示“一个不是选项的选项”

如果您可以控制命令及其参数处理(由于您有依赖于当前行为的其他人编写的程序,因此尚未巩固),则更好的设计是使可选参数真正可选,即可能使第一个参数成为破折号选项

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 <<<"$@"
toupper(){tr'[:lower:''[:upper:'';}
tolower(){tr'[:upper:''[:lower:'';}
每箱1元
--(大写)移位;图珀;;
--(小写)移位;托洛尔;;
*)猫;;

esac请添加一个示例,说明您想做什么以及您目前正在尝试什么,您可能需要使用
getopts
,您的答案可能包含在此处,可能重复“是”,请解释。shell将始终为脚本提供所有参数。您不必使用第一个参数,但它不像您可以在参数前放置一定数量的空格,并将其作为下一个参数计算。因此,假设我有一个脚本可以转换字符串的大小写,即./case[arg1][arg2],其中arg1是“小写”或“大写”,arg2是任意字符串。如果没有提供arg1,那么它将只回显arg2。如何在没有为arg1提供任何内容的情况下在终端中运行此脚本,而为arg2提供“abcdefgh”?请添加一个示例,说明您希望执行的操作以及您目前正在尝试的操作,您可能需要使用
getopts
,并且您的答案可能包含在此处可能重复的“是”,请解释。shell将始终为脚本提供所有参数。您不必使用第一个参数,但它不像您可以在参数前放置一定数量的空格,并将其作为下一个参数计算。因此,假设我有一个脚本可以转换字符串的大小写,即./case[arg1][arg2],其中arg1是“小写”或“大写”,arg2是任意字符串。如果没有提供arg1,那么它将只回显arg2。在没有为arg1提供任何内容,而为arg2提供“abcdefgh”的情况下,如何在终端中运行此脚本