我有一小段代码可以说get.sh
将日期设置为这样的变量
date=$(date +%b%d%y)
现在我希望能够将自定义日期参数传递给get.sh
喜欢
./get.sh --date=2019-01-01
并且在 get.sh 上能够检查是否发送了任何参数,如果没有发送则获取参数,而不是保持原样,就像
if ( isset( dateFromCli ) )
date = datefromCLi
else
date=$(date +%b%d%y
答案1
查看 Bash 手册页上的“特殊参数”。简而言之,您应该能够测试${#}确定提供了多少个命令行参数,以及${1},${2},${3}, ... 使用各个参数值。
答案2
对于您的特定问题,如果您使用 Bash,这也可以工作,通过允许您省略构造来稍微缩短您的代码if
:
currentDate=${dateFromCLI-+%b%d%y}
等号右边的表达式是参数展开的一种特殊形式,其一般形式为:
${variableName-"default value"}
如果定义了该名称下的变量variableName
,则整个${}
构造将扩展为该变量的值。
但是,如果未定义,则该构造将扩展为默认值,位于文字连字符 ( -
) 的右侧。如果一个变量之前被赋值并且之后没有被取消设置,则该变量被认为是已定义的。如果分配了空值,它甚至会被定义。
如果您之前设置dateFromCLI
为空值,则可以使用相同的扩展样式,但-
替换为:-
。在这种情况下,如果定义了命名变量,但具有空值(空字符串),则也会选择默认值:
${variableName:-"default value"}