我想知道如何将数组中的每个项目作为参数传递给命令中的标志。
例如
myCommand -f foo1 -f foo2, ... -f fooN
我想定义一个这样的数组
FOOS=("foo1" "foo2" ... "fooN")
并遍历数组以在示例中用作-f
标志。
就我而言,我想将目录中的每个文件传递给某个命令,每个命令都使用-f
命令。有什么想法吗?
答案 0 :(得分:3)
最可靠的解决方案是手动构建第二个列表:
CREATE TABLE Ship (
shipID varchar(30) NOT NULL,
pilot1_SIN varchar(11) NOT NULL,
pilot2_SIN varchar(11) NOT NULL,
years_in_operation INT,
num_of_seats INT,
manufacturer varchar(30),
advertising_revenue FLOAT,
fuel_type varchar(15)
PRIMARY KEY (shipID, pilot1_SIN, pilot2_SIN),
FOREIGN KEY (pilot1_SIN) REFERENCES Pilot(SINumber),
FOREIGN KEY (pilot2_SIN) REFERENCES Pilot(SINumber),
CONSTRAINT check_pilots CHECK (pilot1_SIN != pilot2_SIN)
);
没有真正简单的方法来做到这一点。您可以使用字符串替换在每个项目之前添加args=()
for foo in "${FOOS[@]}"; do args+=(-f "$foo"); done
myCommand "${args[@]}"
。它将一直工作到其中一个参数具有空格或glob,然后才没有。
"-f "
(请注意myCommand ${FOOS[@]/#/-f }
周围的缺乏。)
答案 1 :(得分:1)
如果该命令允许直接附加标志及其参数(例如myCommand -ffoo1 -ffoo2 ...
),则可以通过在扩展时将-f
附加到数组元素上来直接做到这一点:
myCommand "${FOOS[@]/#/-f}"
...但是,当然,并非所有命令都允许这样做。空(零长度)参数还存在潜在的问题;它们与分别传递的参数没有区别,因此此技巧将导致以下标志被误解析为空参数。
请注意,某些命令允许使用带有=
分隔参数的长格式标志(例如myCommand -file=foo1 -file=foo2 ...
),在这种情况下这将起作用,并且不适用于空参数的问题。