首页 > 解决方案 > 使用转义字符在 shell 中组合命令?

问题描述

我在 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

解决方案


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

所以在你的情况下,\只是转义了空格字符。所以基本上,exit 1不运行,只是连接为文字参数echo以及"Failed to unzip ${1}"ie的扩展值

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?

推荐阅读