我使用bash substitutions为输入提供简洁的单行验证,例如:
#!/bin/bash
export PARAM1=${1?Error, please pass a value as the first argument"}
# do something...
但在某些情况下,我只想在未设置某些内容时记录消息,然后继续正常操作。这有可能吗?
答案 0 :(得分:1)
也许是
的内容test -n "$1" && export PARAM1="$1" || log "\$1 is empty!"
应该做;当且仅当test
非空时,$1
子句才返回true。
答案 1 :(得分:1)
对于常规参数(在bash
4或更高版本中),您可以使用-v
运算符来检查是否设置了参数(或数组元素,版本4.3):
[[ -v foo ]] || echo "foo not set"
bar=(1 2 3)
[[ -v bar[0] ]] || echo "bar[0] not set"
[[ -v bar[8] ]] || echo "bar[8] not set"
不幸的是,-v
无法使用位置参数,但您可以使用$#
代替(因为您无法设置$3
而不设置$1
)。
(( $# >= 3 )) || echo "third argument not set"
在-v
可用之前,您需要比较两个默认值扩展,以查看参数是否未设置。
[[ -z $foo && ${foo:-bar} == ${foo-bar} ]] && echo "foo is unset, not just empty"
bar
没有什么特别之处;它只是一个任意的非空字符串。