如何在ash/sh中替代Bash数组实现长命令的多行拆分?
在ash/sh中拆分长命令的替代方案
由于ash(及POSIX sh)不支持bash风格的数组,你可以用以下几种方式拆分长命令,避免单行过长:
1. 反斜杠换行拆分
这是最直接的方式,利用反斜杠\告诉shell当前命令未结束,下一行是命令的延续:
CURL=/usr/bin/curl http_code=$("$CURL" \ --silent \ --location \ --output /dev/null \ --write-out "%{http_code}" \ --request GET \ --max-time 30 \ --retry 3 \ "https://httpbin.org/status/200" )
注意反斜杠后面不能有空格或制表符,否则会被当成参数的一部分。
2. 使用set命令预设位置参数
通过set --将参数预先设置为位置变量,再用"$@"引用所有参数,能正确保留参数中的空格(如果有):
CURL=/usr/bin/curl set -- \ --silent \ --location \ --output /dev/null \ --write-out "%{http_code}" \ --request GET \ --max-time 30 \ --retry 3 \ "https://httpbin.org/status/200" http_code=$("$CURL" "$@")
这种方式适合参数较多、需要复用参数列表的场景。
3. 封装为函数
如果需要重复调用类似的curl命令,把参数逻辑封装成函数会更灵活,还能将可变部分(比如目标URL)作为函数参数传入:
CURL=/usr/bin/curl check_http_status() { "$CURL" \ --silent \ --location \ --output /dev/null \ --write-out "%{http_code}" \ --request GET \ --max-time 30 \ --retry 3 \ "$1" } http_code=$(check_http_status "https://httpbin.org/status/200")
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

