我有这个:
ql_remove_locks(){
local pid="$$";
declare -i count=0;
ql_pid="$pid" ql_node_ls_all | while read line; do
count=$((count+1));
echo "count: $count";
echo "deleting lock: $line";
rm -rf "$line";
done;
echo "quicklock: $count lock(s) removed."
}
我收到了这个输出:
count: 1
deleting lock: /Users/alexamil/.quicklock/locks/a.lock
quicklock: 0 lock(s) removed.
我已经尝试了很多东西,但仍然会记录0:
quicklock: 0 lock(s) removed.
为什么echo语句中的计数为0而不是1?
答案 0 :(得分:3)
管道中的命令在子shell中运行。 while
循环位于子shell中,具有自己的变量副本,并且修改$count
并不会传播回父shell。
您可以将管道切换到重定向+流程替换以解决此问题。
while read line; do
count=$((count+1))
echo "count: $count"
echo "deleting lock: $line"
rm -rf "$line"
done < <(ql_pid="$pid" ql_node_ls_all)
注意:分号是多余的。