如果我想循环遍历静态分配的目录,我可以这样做:
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
首先进入目录的情况下执行此操作?
答案 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
干杯!