小编Jam*_*ond的帖子

如果使用声明,Bash 变量不会在数组内扩展

最近,我决定读多一点关于bash的内置插件declarelocalreadonly,这使我从切换:

local variable_name
variable_name='value'
readonly variable_name
Run Code Online (Sandbox Code Playgroud)

到:

variable_name='value'
declare -r variable_name
Run Code Online (Sandbox Code Playgroud)

此更改减少了写入的行数并允许我设置一些属性,例如告诉 bash 变量的值是一个整数,这很好。然而,在创建一个用作 cURL 别名的函数时,我注意到如果我使用declare,数组中的变量永远不会扩展,但使用local和扩展就好了readonly

下面是一个例子:

#!/usr/bin/env bash

set -o errexit -o errtrace -o pipefail -o nounset
IFS=$'\n\t'

curl() {

  curl_version="$(command curl --version | awk 'NR==1 {print $2}')"
  declare -r curl_version

  curl_args=(
    --user-agent "curl/${curl_version}"
    --silent
    --fail
  )

  command curl "${curl_args[@]}" \
    "${@}"

}

curl --url 'https://httpbin.org/get'
Run Code Online (Sandbox Code Playgroud)

因为无论出于何种原因变量都不会扩展,--user-agent数组的一部分使脚本退出并出现错误,因为据 bash 所知,这是一个未绑定的变量,并且由于set -o nounset.

几天来我一直试图让它发挥作用,所以我想是时候扔掉毛巾寻求帮助了。任何人都可以指出我正确的方向以了解我做错了什么吗?

编辑: …

bash array shell-script curl readonly

7
推荐指数
2
解决办法
409
查看次数

标签 统计

array ×1

bash ×1

curl ×1

readonly ×1

shell-script ×1