#! /bin/bash
dir=$(find . -type f)
echo ${dir[0]}
echo "This is dir[0]"
echo ${dir[1]}
我想将当前dir中递归的所有文件添加到数组arr []中,但上面的代码失败,
zhangyf@zhangyf-desktop:~/test/avatar$ ./new.sh
./daily_burn.sh ./test.sh ./.gitignore ./new.sh
This is dir[0]
dir不是此代码中的数组。什么是正确的方法?谢谢!
答案 0 :(得分:1)
dir=(`find . -type f`)
echo ${dir[0]}
echo ${dir[1]}
答案 1 :(得分:1)
dir=$(find . -type f)
应该是
dir=(`find . -type f`)
答案 2 :(得分:1)
这是一个针对您想要的小型完整shell测试 - 在安全的地方执行,例如而在/ tmp:
# Prepare
rm -rf root
mkdir root
mkdir root/1
touch root/1/a
touch root/1/b
#touch root/1/"b with spaces"
mkdir root/2
touch root/2/c
mkdir root/2/3
touch root/2/3/d
# Find
echo --- Find
find root
# Test
echo --- Test
files=(`find root -type f`)
echo $files
# Print whole array
flen=${#files[*]}
for (( i=0; i < $flen; i++ )); do
echo files[$i] = ${files[i]}
done
这个输出是:
--- Find
root
root/1
root/1/a
root/1/b
root/2
root/2/c
root/2/3
root/2/3/d
--- Test
root/1/a
files[0] = root/1/a
files[1] = root/1/b
files[2] = root/2/c
files[3] = root/2/3/d
请注意文件中的空格 - 如果您通过删除此行前面的#
取消注释上面的注释触摸:
#touch root/1/"b with spaces"
您将获得以下内容:
--- Find
root
root/1
root/1/b with spaces
root/1/a
root/1/b
root/2
root/2/c
root/2/3
root/2/3/d
--- Test
root/1/b
files[0] = root/1/b
files[1] = with
files[2] = spaces
files[3] = root/1/a
files[4] = root/1/b
files[5] = root/2/c
files[6] = root/2/3/d
显然,你可以这样做:
希望这有帮助。