Bash中的递归广度首次遍历

时间:2012-09-19 22:48:17

标签: linux bash recursion tree breadth-first-search

我试图发现为什么我的遍历不起作用。我相信我已经将问题隔离在代码中,它说“目录包含”,然后传递给函数。该函数传递一个数组,其中包含所有要回显的新文件路径,但由于某种原因它只接收第一个。我错误地传递了数组还是其他东西?

#!/bin/bash

traverse(){
  directory=$1
  for x in ${directory[@]}; do
    echo "directory contains: " ${directory[@]}
    temp=(`ls $x`)
    new_temp=( )
    for y in ${temp[@]}; do
      echo $x/$y
      new_temp=(${new_temp[@]} $x/$y)
    done
  done

  ((depth--))

  if [ $depth -gt 0 ]; then
    traverse $new_temp
  fi
}

1 个答案:

答案 0 :(得分:1)

您不能将数组作为参数传递。你只能传递字符串。你必须扩大 首先将数组放到其内容列表中。我冒昧地制造depth 你的函数是局部的,而不是我假设的全局变量。

traverse(){
  local depth=$1
  shift
  # Create a new array consisting of all the arguments.
  # Get into the habit of quoting anything that
  # might contain a space
  for x in "$@"; do
    echo "directory contains: $@"
    new_temp=()
    for y in "$x"/*; do
      echo "$x/$y"
      new_temp+=( "$x/$y" )
    done
  done

  (( depth-- ))
  if (( depth > 0 )); then
    traverse $depth "${new_temp[@]}"
  fi
}

$ dir=( a b c d )
$ init_depth=3
$ traverse $init_depth "${dir[@]}"