ls有条件的linux脚本for循环

时间:2011-12-02 19:23:02

标签: linux sh ls

我正在尝试创建一个简单的for循环,它将获取ls命令的所有输出并将每个输出放入变量中。到目前为止我有

for i in ls /home/svn
do
    echo $i
done

但它给了我一个错误。

4 个答案:

答案 0 :(得分:5)

因为需要执行ls

for i in $(ls ...); do
  echo $i
done

另外,您可能需要考虑使用shell globbing:

for i in /home/svn/*; do
  echo $i
done

...或find,它允许非常精细地选择要查找的项的属性:

for i in $(find /home/svn -type f); do
  echo $i
done

此外,如果路径段或文件名本身可以有空格,请使用while循环(上一个示例已调整):

find /home/svn -type f|while read i; do
  echo $i
done

while按行读取,以便保留空白区域。

关于调用basename,您有两种选择:

# Call basename
echo $(basename $i)
# ... or use string substitution
echo ${i##*/}

解释替换:##从字符串中删除最长的前锚定模式,#直到第一个模式匹配,%%最长的后锚模式和{{ 1}}第一次回归完全匹配。

答案 1 :(得分:1)

在这种情况下,您无需使用ls来检索文件,以下内容可以完成此任务:for i in /home/svn/*; do echo $i; done

答案 2 :(得分:0)

您希望将ls命令的输出分配给i,因此您需要将其括在反引号或$()运算符中:

for i in $(ls /home/svn)
do
    echo $i
done

答案 3 :(得分:0)

那是因为你首先做错了。

for i in /home/svn/*
do
  echo "$i"
done