假设您希望脚本从环境中获取变量:
#!/usr/bin/env bash
set -eu
if (( ${A-} )); then
echo true
else
echo false
fi
算术扩展在这里似乎更合理地处理(empty)
、0
、1
情况或 else:
if [ "${A-}" ] && [ "${A-}" != 0 ]; then
但是之后,
$ A='1 - 1' ./1.sh
false
$ A='B = 1' ./1.sh
true
所以现在您基本上可以更改变量,而您通常不想允许这样做。你有什么建议?如何处理从环境变量中获取的布尔标志?
答案1
如果您不确定变量是否包含 int,您可以验证其值:
#!/usr/bin/env bash
set -eu
vint() {
local v
for v; do
if echo "$v" | egrep '[^0-9]' &> /dev/null; then
printf '%s: %s: not an int\n' "$0" "$v" >&2
exit 1
fi
done
}
vint "${A-}"
if (( ${A-} )); then
echo true
else
echo false
fi
这是我所能接受的。