bash 以目录长度循环
bash do loop with length of directory
我正在尝试遍历目录中的文件名,以便对每个文件名执行操作。
如果我使用:
,我只能遍历 10 个文件名
var=($(ls directory))
for k in {1..10}
do
echo ${var[$k]}
done
它给出了我目录中的前 10 个文件名。但是,我想循环遍历它们。
如果我这样做:
length=($(ls directory -1 | wc -l))
我得到了长度(对于这个例子,它是 62)
因此,当我将所有内容组合在一起时:
var=($(ls directory))
length=($(ls directory -1 | wc -l))
for k in {1..$length}
do
echo ${var[$k]}
done
我收到错误“语法错误:预期操作数(错误标记为“{1..62}”)
任何解决此问题的帮助或更好的解决方案将不胜感激!
括号扩展由 shell 在变量扩展之前执行,因此您收到错误。
您可以使用:
for k in $(seq 1 "$length")
解决这个问题。
此外,您可以通过以下方式轻松完成您正在做的事情:
files=( * )
for i in "${files[@]}"; do echo "$i"; done
或更简单:
printf '%s\n' "${files[@]}"
为什么不简单:
for file in *; do
if [ -f "$file" ]; then
echo "Do what you want with" "$file";
fi
done
我正在尝试遍历目录中的文件名,以便对每个文件名执行操作。
如果我使用:
,我只能遍历 10 个文件名var=($(ls directory))
for k in {1..10}
do
echo ${var[$k]}
done
它给出了我目录中的前 10 个文件名。但是,我想循环遍历它们。
如果我这样做:
length=($(ls directory -1 | wc -l))
我得到了长度(对于这个例子,它是 62)
因此,当我将所有内容组合在一起时:
var=($(ls directory))
length=($(ls directory -1 | wc -l))
for k in {1..$length}
do
echo ${var[$k]}
done
我收到错误“语法错误:预期操作数(错误标记为“{1..62}”)
任何解决此问题的帮助或更好的解决方案将不胜感激!
括号扩展由 shell 在变量扩展之前执行,因此您收到错误。
您可以使用:
for k in $(seq 1 "$length")
解决这个问题。
此外,您可以通过以下方式轻松完成您正在做的事情:
files=( * )
for i in "${files[@]}"; do echo "$i"; done
或更简单:
printf '%s\n' "${files[@]}"
为什么不简单:
for file in *; do
if [ -f "$file" ]; then
echo "Do what you want with" "$file";
fi
done