Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash脚本中将数组中的所有值作为参数逐个传递?_Linux_Bash - Fatal编程技术网

Linux 如何在bash脚本中将数组中的所有值作为参数逐个传递?

Linux 如何在bash脚本中将数组中的所有值作为参数逐个传递?,linux,bash,Linux,Bash,我想创建一个菜单,供用户使用该对话框选择要查看的文件。文件名存储在名为“文件名”的数组中。我想将它们作为参数发送到dialog命令,如下所示: dialog --menu "Choose a file:" 20 50 ${#fileNames[@]} 1 <${fileNames[0]}> 2 <${fileNames[1]}> ... 对话框--菜单“选择文件:”20 50${#文件名[@]}12。。。 嗯,最简单的方法是使用${fileNames[@]} dialo

我想创建一个菜单,供用户使用该对话框选择要查看的文件。文件名存储在名为“文件名”的数组中。我想将它们作为参数发送到dialog命令,如下所示:

dialog --menu "Choose a file:" 20 50 ${#fileNames[@]} 1 <${fileNames[0]}> 2 <${fileNames[1]}> ...
对话框--菜单“选择文件:”20 50${#文件名[@]}12。。。

嗯,最简单的方法是使用
${fileNames[@]}

dialog --menu "Choose a file:" 20 50 ${#fileNames[@]} 1 "${fileNames[@]}"
编辑:要在每个参数之间添加数字,我将使用
for
循环

line="dialog --menu \"Choose a file:\" 20 50 ${#fileNames[@]}"
for ((i=0;i<${#fileNames[@]};i++)); do
    line="$line "$(($i + 1))
    line="$line " "${FileNames[$i]}"
done
$line #This will run the completed line built above
line=“dialog--menu\”选择一个文件:\“20 50${{文件名[@]}”

对于((i=0;i您应该寻求一种解决方案,该解决方案可以处理包含特殊字符(空格,甚至换行符)的文件名。您可以使用所有必需的字符串构建一个辅助数组,如下所示:

declare -i i=0
declare -a arguments=()
for file in "${fileNames[@]}" ; do
  arguments+=( $((++i)) "$file")
done
dialog --menu "Choose a file:" 20 50 "${arguments[@]}"
“${arguments[@]}”
数组扩展中的双引号可以防止在每个元素中发生分词,并保证文件名中的空格和其他特殊(但有效)字符不会导致问题


请注意,此代码假定
文件名
数组已存在且不是空的。它还假定传递给
对话框
命令的数字不是实际的数组索引,而是顺序的,从1开始。如果这些假设不正确,请注释,我可以相应地更新解决方案。

是,但我需要在每个文件名之间添加数字我的错误,等一下。