Shell脚本:for循环不会打印文件

时间:2016-10-31 03:47:25

标签: bash glob

请告诉我为什么这个脚本不会在主目录中打印文件名。

#!/bin/bash

d="$HOME"

for f in $d
do
        echo "$f"
done

1 个答案:

答案 0 :(得分:1)

$HOME扩展到调用用户的主目录,例如/home/foobar,因此变量d将只包含此字符串,而不是目录中的内容。

您可以利用数组:

#!/bin/bash
files=( "$HOME"/* )
for f in "${files[@]}"; do
    echo "$f"
done
  • 数组files将包含$HOME

  • 内的内容名称
  • "${files[@]}"扩展为数组files的元素,引号对于防止分词和通过shell进行路径名扩展非常重要

  • 我们使用for循环迭代数组元素