我有一些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
并且管道不起作用。
答案 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