在 Bash 中读取带有前置或附加值的数组
Readarray with preppended or appended values in Bash
在 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
命令中在一行中实现相同的功能?
由于进程替换输出 <(..)
被进程使用的 FIFO 替换,您可以在其中添加更多选择命令。例如。要追加 "custom1" "custom2"
你只需要做
readarray -t layouts < <(
localectl list-x11-keymap-layouts;
printf '%s\n' "custom1" "custom2" )
这将创建一个 FIFO,其中包含来自 localectl
输出和 printf
输出的内容,以便 readarray
可以将它们作为另一个唯一的非空行读取。对于前置操作,与 printf
输出相同,后跟 localectl
输出。
您可以使用 -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)
在 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
命令中在一行中实现相同的功能?
由于进程替换输出 <(..)
被进程使用的 FIFO 替换,您可以在其中添加更多选择命令。例如。要追加 "custom1" "custom2"
你只需要做
readarray -t layouts < <(
localectl list-x11-keymap-layouts;
printf '%s\n' "custom1" "custom2" )
这将创建一个 FIFO,其中包含来自 localectl
输出和 printf
输出的内容,以便 readarray
可以将它们作为另一个唯一的非空行读取。对于前置操作,与 printf
输出相同,后跟 localectl
输出。
您可以使用 -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)