在bash脚本中,我进行了此测试。这非常有效。
Stepper 0 clicked. Its value 1.0
Stepper 1 clicked. Its value 1.0
Stepper 0 clicked. Its value 2.0
Stepper 0 clicked. Its value 3.0
Stepper 3 clicked. Its value 1.0
现在我想允许第三个参数强制。但无论价值如何,测试通过:
function copy_to_server {
if [ $1 -nt limit ]; then
如何正确测试我的参数?
答案 0 :(得分:1)
您需要包含空格:
if [ "$1" -nt limit ] || [ "$3" = "-f" ] || [ "$3" = "--force" ]; then
如果不这样做,shell会将测试内部视为单个参数,并且通过规范,使用单个参数,测试将返回" true" (0)如果参数不为空。
另外,请注意我在第一个测试中引用了$1
:如果传递的参数包含空格,则不会引用单词拆分,并且shell将看到三个以上的参数并且语法失败错误(或者至少不做你想做的事。)
如果您不介意使用特定于Bash的语法,则可以使用[[ ]]
类型的测试,该测试不执行分词。
if [[ $1 -nt limit ]] || [[ $3 = -f ]] || [[ $3 = --force ]]; then
但是,到那时,你可以把它们放在一个单独的测试中,因为这种测试方式也支持逻辑运算符:
if [[ $1 -nt limit || $3 = -f || $3 = --force ]; then
请注意,=
测试中的!=
和[[ ]]
运算符会进行通配,因此如果正在测试的字符串包含可触发glob的内容,则需要引用右侧(比如*)。