也许我漏掉了,但我没有找到cd ''
应该成功的文档。由于没有名为 的目录''
,所以显然应该失败。例如,
mydir=
cd -- "$mydir" || exit 1 # succeeds!!
echo wrong
好像有一百万个脚本里都有 bug,随时可能出现。这算不算是某种向后兼容的 bug?难道我每次都要单独检查变量名是否为空吗cd
?顺便说一句,shellcheck
我也没发现这个问题。
也许我漏掉了,但我没有找到cd ''
应该成功的文档。由于没有名为 的目录''
,所以显然应该失败。例如,
mydir=
cd -- "$mydir" || exit 1 # succeeds!!
echo wrong
好像有一百万个脚本里都有 bug,随时可能出现。这算不算是某种向后兼容的 bug?难道我每次都要单独检查变量名是否为空吗cd
?顺便说一句,shellcheck
我也没发现这个问题。
为什么这种括号语法有效
$ for (( i=0; i<3; ++i )) { echo $i; }
0
1
2
当手册页说语法是
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
$ bash --version | head -1 # on linux mint virginia (ubuntu jammy)
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)
如果这是一个尚未记录的语法添加,那么它是什么时候添加的?
我一直听说 shebang 行(例如#!/bin/bash
)的目标必须是二进制可执行文件,而不是脚本。对于许多操作系统(例如 MacOS)来说仍然如此。但令我惊讶的是,在 Linux 上情况并非如此,Linux 上最多可以使用 4 级脚本,其中第四个脚本在其 shebang 行中引用了二进制可执行文件。但是,如果使用 5 级脚本,则程序将失败并出现错误Too many levels of symbolic links
。
请参阅LWN 文章“程序如何运行”以及该文章中未显示的以下代码。
$ cat wrapper2
#!./wrapper
此更改何时发生(假设在某些时候不允许)?