我正在尝试编写一个脚本,将带有路径的所有文件名加载到bash脚本中的数组中。
说我希望/ home / documents /中的所有文件夹和子文件夹的文件最后会给我一些文件。
我当前的脚本非常基本,但应该有一些功能。
num_partitions=0
for file in /home/documents/*; do
date_partition[$num_partitions]=${file##*/}
((num_partitions++))
echo ${date_partition}
done
目前它只打印黑屏。如何修复它以获得我需要的功能并正确打印?
我是Bash的新手,这实际上是我的第一个剧本。请帮助。
答案 0 :(得分:2)
首先,通常,您不想解析ls的输出... http://mywiki.wooledge.org/ParsingLs
接下来,你的方法的逻辑没有错。我们可以使用一种更简单的方法来完成这项任务!
ar=( $(find /home/documents/*) ); echo "${#ar[@]}"; echo "${ar[2]}"
我们打破了它。
$( find /home/documents/* )
这是命令替换。它捕获写入其中的命令的输出。有了这个,您可以执行类似output=$( find .)
的操作,现在output是一个包含find命令结果的变量。
接下来我们有
ar=()
()
创建一个数组。此数组的输入现在将是find命令的输出。因此,当我们将它们组合在一起时,我们最终会“从此find命令的输出中创建一个数组”。
命令的其余部分只显示ar
实际上是一个数组。我们打印出数组的长度,然后打印索引2的值。
推荐谷歌搜索将是... bash中的命令替换。从bash中的命令创建数组。如何在bash中使用数组。
注意:请注意$( )
中的命令可以包含|
其他命令,例如find . | tr -d "." | ./some_other_command
。另外我建议阅读自“。”以来查找的手册页。并且“..”可能会出现在您的数组中,因为它现在已经写好了。