我正在尝试调试为什么脚本没有在我的服务器上执行我想要的操作。在测试时,我发现了一个奇怪的现象。我有一个目录,大致如下所示:
bash-4.3# ls -l ./ 共 0 -rw-r--r-- 1 root root 0 8月6日 05:46 db.local.php -rw-r--r-- 1 root root 0 8月 6 05:46 global.php -rw-r--r-- 1 root root 0 8月6日 05:46 local.php -rw-r--r-- 1 root root 0 8月 6 05:46 someOther.global.php
看看运行这个命令,输出正是我所期望的:
bash-4.3# for i in ./*; do echo $i; done ./db.local.php ./global.php ./本地.php ./someOther.global.php
但是当我运行此命令时,输出没有任何意义。由于某种原因,星号被转义了:
bash-4.3# for i in ./*local.php; do echo $i; 完成 *本地.php
这发生在安装了 bash 4.3.30 的服务器上。我尝试在 bash 4.4 和 docker 容器 bash:4.3(即 bash 4.3.48)中本地重现相同的行为,但无法重现该问题。
有什么设置可以解决这个问题吗?除了 bug 之外还有什么可能吗?
我在发送之前刚刚想出了一个小补充:如果我在服务器上启动同一个 docker 容器,它的行为方式相同,这不太可能是设置问题,因为容器中没有安装任何来自主机系统的东西。不过,我不确定这可能是什么,有谁知道吗?
编辑:@grawity
bash-4.3$ for i in ./*; do 声明 -pi; 完成 声明——i=“./db.local.php” 声明——i=“./global.php” 声明——i=“./local.php” 声明——i="./someOther.global.php" bash-4.3$ for i in ./*local.php; do 声明 -pi; 完成 声明——i=“./db.local.php” 声明——i=“./local.php” bash-4.3$ for i in ./*; do echo $i; done ./db.local.php ./global.php ./本地.php ./someOther.global.php bash-4.3$ for i in ./*local.php; do echo $i; 完成 ./db.local.php ./本地.php
我不明白。声明后,它开始正常工作。它也可以正常处理具有其他结尾的其他文件。我不明白刚才发生了什么。
解决方案:感谢 Grawity 的帮助。我显然在上面的测试中犯了一些错误。看起来上面的行为是当没有文件满足星号补全时的标准行为。
答案1
解决方案:感谢 Grawity 的帮助。我显然在上面的测试中犯了一些错误。看起来上面的行为是当没有文件满足星号补全时的标准行为。