我刚接触Bash,发现当我使用set -o errexit命令时,如果一个命令失败,脚本并没有退出。后来发现是因为我声明了一个局部变量!
请告诉我如何同时使用局部变量和set -o errexit命令。
示例:
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
function test {
local output=$(ls --badoption)
echo "error code is $?"
echo "output=$output"
}
test
结果:
./test.sh
ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
error code is 0
output=
但是:
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
function test {
output=$(ls --badoption)
echo "error code is $?"
echo "output=$output"
}
test
结果:
ls: illegal option -- -
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
-o errexit
仅适用于命令是简单命令(如bash手册页中定义的)的情况,而在声明本地变量时运行命令并不是作为简单命令运行。 - blm