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