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