我在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] 删除。
我来说两句