Bash替换:未设置变量时的日志

时间:2015-08-19 10:14:04

标签: bash

我使用bash substitutions为输入提供简洁的单行验证,例如:

#!/bin/bash
export PARAM1=${1?Error, please pass a value as the first argument"}
# do something...

但在某些情况下,我只想在未设置某些内容时记录消息,然后继续正常操作。这有可能吗?

2 个答案:

答案 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没有什么特别之处;它只是一个任意的非空字符串。