Bash - 循环遍历路径作为参数

时间:2018-01-06 03:42:23

标签: bash

如果我想循环遍历静态分配的目录,我可以这样做:

constexpr

如果我想将目录作为参数传递,那么我可以:

cd /path/to/directory
for file in *
do
    echo 'Found file' $file
done

如果我将cd $1 for file in * do echo 'Found file' $file done 参数移动到循环中,我会收到错误,因为它不是数组:

$1

有没有更好的方法可以在不必for file in $1 do echo 'Found file' $file done 首先进入目录的情况下执行此操作?

2 个答案:

答案 0 :(得分:3)

如果我理解正确,那么您正试图遍历在{/ 1}}指定的目录中的文件。在这种情况下,您可以这样做:

$1

请注意,我还在双引号中包含了所有变量引用。这几乎总是一个好主意,因为如果变量包含空格,制表符,通配符等(所有这些都在文件名中是合法的),它可以防止误解。另一方面,for file in "$1"/* do echo 'Found file' "$file" done 无法被引用,或者它不会被扩展;所以*被半引用以获得正确的治疗。

答案 1 :(得分:-1)

@Gordon Davisson的回答应该有效。他正在使用所谓的globbing来获取$1中所有内容的内容。除了globbing之外,您可以使用ls

for file in $(ls $1}); do
  echo "Found file ${file}"
done

你可以使用背景:

for file in `ls $1`; do
  echo "Found file ${file}"
done

有很多方法可以完成这项工作。如果您只想打印文件(而不是子目录):

dir=$1
for file in $(ls $dir); do
  if [[ -f ${dir}/${file} ]]; then
    echo "File found ${file}"
  fi
do

干杯!