假设我有一个名为app. 用法示例:app -t 'first tab' -t 'second tab'在该程序中打开两个“标签”。
问题是:如果参数数量可以变化,我如何app从bash脚本中执行命令(即)?
考虑一下:
#!/bin/bash
tabs=(
'first tab'
'second tab'
)
# Open the app (starting with some tabs).
app # ... How to get `app -t 'first tab' -t 'second tab'`?
Run Code Online (Sandbox Code Playgroud)
我希望上述脚本具有等效于app -t 'first tab' -t 'second tab'. 这样的bash脚本怎么写?
编辑:请注意,问题是询问有关使用参数数组动态组合命令行参数的问题。
ilk*_*chu 10
从数组中提供参数很容易,"${array[@]}"将数组条目扩展为不同的单词(参数)。我们只需要添加-t标志。为此,我们可以遍历第一个数组,并为完整的参数列表构建另一个数组,同时添加-t标志:
#!/bin/bash
tabs=("first tab" "second tab")
args=()
for t in "${tabs[@]}" ; do
args+=(-t "$t")
done
app "${args[@]}"
Run Code Online (Sandbox Code Playgroud)
使用"$@"而不是"${tabs[@]}"获取脚本的命令行参数而不是硬编码列表。
tabs=("-t" "one tab" "-t" "second tab")
echo app "${tabs[@]}"
app -t one tab -t second tab
Run Code Online (Sandbox Code Playgroud)
所以现在你应该将原始数组转换为带有“-t”标志的数组。希望这根本不是问题。