我有一个处理文件夹的脚本,并同时计算文件。
i=1
find tmp -type f | while read x
do
i=$(($i + 1))
echo $i
done
echo $i
Run Code Online (Sandbox Code Playgroud)
但是,$i总是1,我该如何解决这个问题?
iga*_*gal 54
在您的示例中,while 循环在子 shell 中执行,因此对 while 循环内变量的更改不会影响外部变量。这是因为您将循环与管道一起使用,这会自动使其在子外壳中运行。
这是使用 while 循环的替代解决方案:
i=1
while read x; do
i=$(($i + 1))
echo $i
done <<<$(find tmp -type f)
echo $i
Run Code Online (Sandbox Code Playgroud)
这是使用 for 循环的相同方法:
i=1
for x in $(find tmp -type f);
do
i=$(($i + 1))
echo $i
done
echo $i
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅以下帖子:
另请参阅 Advanced Bash Scripting Guide 中的以下章节:
小智 8
#!/bin/bash
i=1
while read x
do
i=$((i+1))
echo $i
done < <(find . -type f)
echo $i
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73431 次 |
| 最近记录: |