a.s*_*ith 7 bash array shell-script
运行命令时,我得到 10 行输出。我想将第 2-4-6-8-10 行放入一个数组中。
每次我运行我的命令时,顺序都会改变,所以我需要一次性完成。我曾尝试运行我的命令并选择第 2 行,然后再次运行并选择第 4 行等,但由于顺序更改,这不起作用:
value1=$(my_command |sed '2q;d')
value2=$(my_command |sed '4q;d')
value3=$(my_command |sed '6q;d')
value4=$(my_command |sed '8q;d')
value5=$(my_command |sed '10q;d')
MY_ARRAY=("${value1}" "${value2}" "${value3}" "${value4}" "${value5}")
Run Code Online (Sandbox Code Playgroud)
Kus*_*nda 13
使用readarray的bashshell和GNU sed:
readarray -t my_array < <( my_command | sed '1~2d' )
Run Code Online (Sandbox Code Playgroud)
内置readarray函数将行读入数组。这些行是从进程替换中读取的。sed进程替换中的命令将仅输出读取的每第二行my_command(也可以写入sed '1!n;d',或sed -n 'n;p'与标准一样sed)。
在 GNU 中sed,地址n~m地址m从第 行开始的每一行n。sed为方便起见,这是对标准的 GNU 扩展。
该my_command命令只会被调用一次。
测试:
$ readarray -t my_array < <( seq 10 | sed '1~2d' )
Run Code Online (Sandbox Code Playgroud)
$ printf '%s\n' "${my_array[@]}"
2
4
6
8
10
Run Code Online (Sandbox Code Playgroud)