Bash
bash 大括號擴展:是否可以將另一個列表與初始列表相關聯?
例子:
$ eval echo "{x,y,z}\ --opt\; " x --opt; y --opt; z --opt;
假設第二個列表是
{1,2,3}
並且它的長度等於第一個(初始)列表的長度。問題:
- 製作方法
bash
:x --opt 1; y --opt 2; z --opt 3;
- 如何
bash
製作(即從{x,y,z}
列表中引用元素):x --opt x; y --opt y; z --opt z;
單線是優選的。
大括號擴展將創建所有可能的對,它不會並行遍歷兩個列表:
$ echo {x,y,z}' --opt; '{1,2,3} x --opt; 1 x --opt; 2 x --opt; 3 y --opt; 1 y --opt; 2 y --opt; 3 z --opt; 1 z --opt; 2 z --opt; 3
要產生所需的輸出,您需要使用其他東西。例如,循環數組的索引:
#! /bin/bash opt1=(x y z) opt2=(1 2 3) for i in "${!opt1[@]}" ; do printf '%s --opt %s; ' "${opt1[i]}" "${opt2[i]}" done echo
或者,使用關聯數組:
#! /bin/bash declare -A opts=([x]=1 [y]=2 [z]=3) for i in "${!opts[@]}" ; do printf '%s --opt %s; ' "$i" "${opts[$i]}" done echo