Debian Bash 只读关联数组错误重定向

Debian Bash 只读关联数组错误重定向

我在 Debian Gnu/Linux(版本 12.4)上的脚本文件中声明了一个只读关联数组。

与只读变量一样,错误重定向很容易做到,

readonly AQUA_FG="$(tput setaf 87)" 2> /dev/null
readonly GOLD_FG="$(tput setaf 227)" 2> /dev/null

这很有效,特别是当在命令窗口中多次调用或粘贴脚本时。

bash: AQUA_FG: readonly variable

错误未显示在命令窗口中。

如果我创建一个前景色的关联只读数组,例如,

readonly -A FORECOLOUR=(
    [AQUA]="$(tput setaf 87)"
    [GOLD]="$(tput setaf 227)"
) 2> /dev/null

当在命令窗口中声明或粘贴此数组时,

bash: FORECOLOUR: readonly variable

被展示。

我的问题是,对于只读关联数组,这种错误重定向是否可能,或者我做的有些事情不正确?

答案1

只要您用反斜杠屏蔽换行符并将整个内容放在单引号中,错误消息就会消失。

你的声明需要像这样:

readonly -A FORECOLOUR='(\
    [AQUA]="$(tput setaf 87)"\
    [GOLD]="$(tput setaf 227)"\
    )' 2> /dev/null

将数组声明屏蔽为字符串使得整个声明再次意识到错误重定向。

答案2

对于任何感兴趣的人,我已经想出了另一种解决此问题(错误?)的方法。

在单独的 bash 脚本文件中,声明只读关联数组。例如。

脚本关联数组

#!/bin/bash

readonly -A FORECOLOUR=(
    [AQUA]="$(tput setaf 87)"
    [GOLD]="$(tput setaf 227)"
) 2> /dev/null

在需要只读关联数组的脚本文件中。

我的任务脚本

#!/bin/bash

source "/path/to/script-assoc-array" 2> /dev/null

echo "${FORECOLOUR[GOLD]}"

my-task-scripts 中的代码可以复制粘贴,也可以多次调用 my-task-scripts,

bash: FORECOLOUR: readonly variable

将不会显示。必须将错误重定向到

source "/path/to/script-assoc-array" 2> /dev/null

等级。

另外,我不知道在这个顶层重定向错误会产生什么其他后果,所以我不推荐这样做,除非你有一个只读关联数组的脚本文件。

相关内容