使用转义字符在shell中组合命令?

4LegsDrivenCat

我在bash脚本(带有的行unzip)中看到了转义字符的奇怪用法

#!/usr/bin/env bash
echo "doing something"
unzip "${1}" || echo "Failed to unzip ${1}" \ exit 1
echo "doing something"

转义空格以合并命令?解压缩行是否等效于以下内容?

unzip "${1}" || (echo "Failed to unzip ${1}"; exit 1)

它是如何工作的?

伊尼安

\是保留其后字符的文字值的一种方法。参见Bash手册-3.1.2.1转义符

因此,在您的情况下,\正义逃脱了空格字符。所以基本上,exit 1没有运行,但只是作为串联文字形参到echo与扩大值一起"Failed to unzip ${1}"

echo 'Failed to unzip ' ' exit' 1

但是在以下情况下,由于命令分组,在exit 1回显错误后,将实际运行返回退出代码的操作返回到父外壳程序,在unzip命令组中(..)由分隔的组中的每个命令;都将执行。

因此,示例并不相同。

(echo "Failed to unzip ${1}"; exit 1)

重新创建和理解行为的一个最小示例是在下面执行以下操作,并在同时运行这两个操作之后手动检查退出代码 echo $?

false || echo 'failure?' \ exit 1
failure?  exit 1

false || ( echo 'failure?';  exit 1 ; )
failure?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章