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”的习惯。[@]}echoecho“${foo[@]}”
几乎毫无用处,因为echo
没有显示echo“hello world”
和echo“hello”“world”
之间的区别,所以它不会让您知道代码中是否存在引用问题。