微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在命令执行之前阻止 Bash 扩展通配符

如何解决在命令执行之前阻止 Bash 扩展通配符

我有一个启动脚本 /init 来启动 Linux 嵌入式系统。在那里我有一个功能可以计算 SD 卡中的分区

get_number_of_partitions () { ls ${SDCARD_DEV}P* 2> /dev/null | wc -l; }

它适用于一些 busyBox 版本,但不是所有版本。期望是对分区进行计数,例如 /dev/mmcblk0p1 /dev/mmcblk0p2。当我追踪时,我发现对于非工作情况,P*proc 命令之前扩展为 ls。结果计算出 ${SDCARD_DEV} 的 1 个实例 + 来自 proc 个孩子的大约 100 个项目。

我也试过:ls ${SDCARD_DEV}"P*" 给出了相同的结果。

解决方法

我能想到的唯一方法是如果 ${SDCARD_DEV} 以空格结尾,例如

SDCARD_DEV="/dev/ "

结果,正在执行的命令是

ls /dev/ p*

代替

ls /dev/p*

禁用通配符扩展并不能解决这个问题。首先,ls 本身不进行通配符扩展,它依赖于在调用通配符之前扩展通配符的 shell。其次,ls 仍会将它们视为两个单独的参数,它不会将 p* 解释为要在 /dev 内匹配的文件。

理想情况下,您应该首先弄清楚为什么将空间添加到变量中,然后解决这个问题。如果没有,您可以在使用变量之前将其删除:

SDCARD_DEV="$(sed 's/ *$//' <<< "$SDCARD_DEV")"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。