bash - 在函数内的直到语句处扩展“$@”
问题描述
很明显
# type 1
until "echo hi"; do :; done
不起作用,因为的语法until
应该是这样的
# type 2
echo hi; until [ $? -eq 0 ]; do echo hi; done
以确保hi
成功打印。
然而,我发现
# type 3 (similar to type 1)
function makesure { until "$@"; do :; done }
makesure echo hi
也可以按预期工作,但我不知道为什么它会起作用。
语义上type 3
等于? type 2
为什么?
解决方案
当您在 . 周围加上引号时"echo hi"
,它会寻找一个以它作为全名的命令,而不是执行echo
带有参数的命令hi
。它应该是:
until echo hi; do :; done
它在您的函数中起作用,因为"$@"
分别引用每个参数,因此它相当于:
until "echo" "hi"; do :; done;
"$*"
如果您使用而不是,该函数将等效于类型 1 "$@"
,因为它将所有参数一起引用,而不是单独引用。
推荐阅读
- c# - 如何一次运行两个不同的视图文件?
- html - 使用 ::before 在图像上添加叠加层
- python - 有没有办法在正则表达式匹配中插入字符?
- laravel - 为什么我的 updateOrInsert 不起作用 laravel
- swift - 检查 macOS 应用程序的本地计算机依赖项是否存在
- mysql - 如何从 Windows 10 上的其他 PC 访问 localhost url?
- azure - Azure 表查询限制与 ExecuteQuerySegmentedAsync 与 ExecuteQuery
- html - 将 colspan 应用于其中一个单元格时,表格宽度意外更改
- java - 如何从帧字节数组播放流视频
- php - Maatwebsite,如何使用 Ajax 下载 excel?