在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
输出。