Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
Arrays 使用bash数组作为脚本的参数?_Arrays_Bash - Fatal编程技术网

Arrays 使用bash数组作为脚本的参数?

Arrays 使用bash数组作为脚本的参数?,arrays,bash,Arrays,Bash,我试图构建一个数组,然后将其用作脚本的参数。当我回显我认为我正在构建的命令时,它看起来很好。但当我尝试执行它时,什么都没有发生。这里有一个小例子。在我的实际脚本中,我必须在运行时构建数组,这样我就不能硬编码(/tmp-iname“*.log*”),它也必须在较旧的bash环境中运行,所以我不能使用+=附加到数组中 #!/bin/bash args=( /tmp ) args[${#args[@]}]=-iname args[${#args[@]}]="\"*.log\"" # the fol

我试图构建一个数组,然后将其用作脚本的参数。当我回显我认为我正在构建的命令时,它看起来很好。但当我尝试执行它时,什么都没有发生。这里有一个小例子。在我的实际脚本中,我必须在运行时构建数组,这样我就不能硬编码
(/tmp-iname“*.log*”)
,它也必须在较旧的bash环境中运行,所以我不能使用
+=
附加到数组中

#!/bin/bash

args=( /tmp )
args[${#args[@]}]=-iname
args[${#args[@]}]="\"*.log\""

# the following echoes what I expect: find /tmp -iname "*.log"
echo find "${args[@]}"

# this next line does not appear to find any files
find "${args[@]}"

echo the following finds files 
find /tmp -iname "*.log"

我做错了什么?

不要在引号中使用引号,这应该可以:

#!/bin/bash

args=( /tmp )
args[${#args[@]}]=-iname
args[${#args[@]}]='*.log'

find "${args[@]}"

如果您使用
set-x
(或
bash-x yourscript
)并比较该模式下的脚本与手动运行所需命令之间的输出,那么问题就显而易见了。(简短形式:句法引文在解析过程中,在参数展开发生之前被解析,因此将引号放在一段数据内,这些引文在扩展后不会成为语法),而不是<代码>回声“${fo[@ ] }”<代码>,顺便说一下,你可以考虑养成<代码> Prtff '%q '“${fo”的习惯。[@]}echo
echo“${foo[@]}”
几乎毫无用处,因为
echo
没有显示
echo“hello world”
echo“hello”“world”
之间的区别,所以它不会让您知道代码中是否存在引用问题。