bash - 使用转义字符在 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 手册 - 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?
推荐阅读
- javascript - 无法在另一个文件 (node.js) 中导入函数
- python - 检测散列的单词和短语以掩盖它们
- api - curl:找不到匹配项
- javascript - 多个动态初始化时只有一个 Dropzone 工作
- html - 无法将 SVG 的颜色更改为白色
- python-3.x - 无法通过本地控制器的 l2cap 原始套接字发送数据 - [Errno 107] 传输端点未连接
- javascript - 识别字符串中的特定字符(为什么我的代码不起作用?)
- javascript - 如何将音乐添加到 Aframe?
- android - 如何对每个新项目的 RecyclerView 进行排序?
- regex - 如何允许用户名仅小写?