2

我正在尝试使用以下 1 liner bash shell 命令发出自定义错误消息。我没有设置“errorMessage”变量。但是,如果我单独运行命令,我可以将错误消息捕获到 $errorMessage 变量中。我错过了什么?

命令:

[ "errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1)" ] && echo "Something Went Wrong; Error is: ${errorMessage}"

试验/输出:

$ [ "errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1)" ] && echo "Something Went Wrong; Error is: ${errorMessage}"
Something Went Wrong; Error is:
$ echo $errorMessage

$ errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1)
$ echo $errorMessage
mkdir: cannot create directory `/path': Permission denied
4

1 回答 1

2

[是名为的命令test;当没有给出指定要运行的单个测试的参数时,默认值为-n(测试字符串是否为空)。此代码正在测试字符串"errorMessage="(可能带有来自 stderr 的后缀mkdir)是否为空;因为它包含一个固定的前缀,所以无论是否发出任何错误,它都永远不会为空。

如果您想实际为变量赋值,则看起来像:

errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1) \
  || echo "Something Went Wrong; Error is: ${errorMessage}"

这是检查 的退出状态mkdir并运行echo应该是非零的。

于 2017-08-03T04:20:08.630 回答