【发布时间】:2019-08-24 23:07:25
【问题描述】:
我正在尝试使用 bash 脚本遍历目录数组,以便可以使用 ls -arlt 列出目录及其时间戳、所有权等。我正在审查 bash,因此希望得到一些反馈。
对于那些间接引用,它与 declare -a 一起使用,但对于它输出的每个目录和来自 /home/user 的额外目录。
我尝试对每个目录使用declare -n 和declare -r,但不起作用。
#!/bin/bash
# Bash variables
acpi=/etc/acpi
apm=/etc/apm
xml=/etc/xml
array=( acpi apm xml )
# Function to display timestamp, ownership ...
displayInfo()
{
for i in "${array[@]}"; do
declare -n curArray=$i
if [[ -d ${curArray} ]]; then
declare -a _acpi=${curArray[0]} _apm=${curArray[1]} _xml=${curArray[2]}
echo "Displaying folder apci: "
cd $_acpi
ls -alrt
read -p "Press enter to continue"
echo "Displaying folder apm: "
cd $_apm
ls -alrt
read -p "Press enter to continue"
echo "Displaying folder xml: "
cd $_xml
ls -alrt
read -p "Press enter to continue"
else
echo "Displayed Failed" >&2
exit 1
fi
done
}
displayInfo
exit 0
它输出一个额外的目录,列出 /home/user 并且不想要那个输出。
【问题讨论】:
-
acpi、apm和xml是普通变量,而不是数组;因此,当您将curArray指向其中一个然后尝试像访问数组一样访问它时,只有${curArray[0]}具有实际值。看起来您正在循环遍历该变量列表,然后对于每个变量再次遍历相同的事物......这没有任何意义。 -
我已经尝试
curArray[0]for ex 并且仍然在该目录上循环两次,其中一个是正确的,另一个来自不想要的 /home/user。我仍然需要为每个目录暂停。你有例子吗? -
你能解释一下你真正想要做什么吗?是否只是在这三个目录中的每一个上运行
ls -alrt? -
是的,我正在尝试
ls -alrt为每个目录验证它们的时间戳、所有权等...
标签: arrays bash loops ubuntu scripting