此命令(shell代码)问题是否有解决方案

时间:2019-05-08 05:59:59

标签: linux bash shell

我有一些shell代码如下:

while read line; do echo $line; done < (ls -la $path)

但是,出现错误 “ -bash:意外令牌'('附近的语法错误” 我无法解决它。 我知道管道命令也可以做到这一点。 喜欢

ls -la $path | while read line; do echo $line; done

但是实际上我希望在循环中做点什么 喜欢改变全球价值

while read line; $((count++)); done 

并且管道不起作用。

2 个答案:

答案 0 :(得分:3)

process substitution的正确语法是:

while read line; do echo $line; done < <(ls -la $path)

但是无论如何,doing it this way is not a good idea at all改用for循环:

for fname in "$path"/* "$path"/.*; do
  echo "$fname"
done

如果需要获取循环中文件的信息,请使用stat

答案 1 :(得分:2)

请考虑在脚本中尽量避免使用ls,因为其输出可能无法预测。

或者,考虑以下内容:

count=0
for file in "$path"/.* "$path"/*; do
  [[ -e $file ]] && ((count++))
done

有关为何ls如此不可取的更多详细信息,请参见https://mywiki.wooledge.org/ParsingLs