Bash

bash 大括號擴展:是否可以將另一個列表與初始列表相關聯?

  • October 22, 2021

例子:

$ eval echo "{x,y,z}\ --opt\; "
x --opt; y --opt; z --opt;

假設第二個列表是{1,2,3}並且它的長度等於第一個(初始)列表的長度。

問題:

  1. 製作方法bash
x --opt 1; y --opt 2; z --opt 3;
  1. 如何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

引用自:https://unix.stackexchange.com/questions/674047