Bash中带有预挂或附加值的Readarray



在Bash中,如果我想获得所有可用键盘布局的列表,但准备好我自己的键盘布局,我可以做:

readarray -t layouts < <(localectl list-x11-keymap-layouts)
layouts=("custom1" "custom2" "${kb_layouts[@]}")

如果我想附加,我可以做:

readarray -t layouts < <(localectl list-x11-keymap-layouts)
layouts=("${kb_layouts[@]}" "custom1" "custom2")

是否可以在readarray命令的单行中实现相同的功能?

您可以使用-O选项来指定mapfile/readarray的起始索引。所以

declare -a layouts=(custom1 custom2)
readarray -t -O"${#layouts[@]}" layouts < <(localectl list-x11-keymap-layouts)

将添加从数组中现有值之后开始的命令行,而不是覆盖现有内容。

您可以使用+=(...):将多个值一次附加到现有数组

readarray -t layouts < <(localectl list-x11-keymap-layouts)
layouts+=(custom1 custom2)

由于进程替换输出<(..)被FIFO替换,以便进程从中消耗,因此您可以在其中添加更多可供选择的命令。例如,要附加"custom1" "custom2",您只需要执行

readarray -t layouts < <(
localectl list-x11-keymap-layouts; 
printf '%sn' "custom1" "custom2" )

这将创建一个FIFO,其中包含localectl输出和printf输出的内容,这样readarray就可以将它们作为另一个唯一的非空行读取。对于预端操作,与printf输出相同,然后是localectl输出。

相关内容

  • 没有找到相关文章

最新更新