我试图找到其中字符最多的路径名。可能有更好的方法来做到这一点。但我想知道为什么会出现这个问题。
LONGEST_CNT=0
find samples/ | while read line
do
line_length=$(echo $line | wc -m)
if [[ $line_length -gt $LONGEST_CNT ]]
then
LONGEST_CNT=$line_length
LONGEST_STR=$line
fi
done
echo $LONGEST_CNT : $LONGEST_STR
它总是以某种方式返回:
0 :
如果我在 while 循环内打印调试结果,则值是正确的。那么为什么 bash 不将这些变量设为全局变量呢?
当你通过管道输入while
在 Bash 中循环,它创建一个子 shell。当子 shell 退出时,所有变量都会返回到它们之前的值(可能为 null 或未设置)。这可以通过使用进程替换来防止。
LONGEST_CNT=0
while read -r line
do
line_length=${#line}
if (( line_length > LONGEST_CNT ))
then
LONGEST_CNT=$line_length
LONGEST_STR=$line
fi
done < <(find samples/ ) # process substitution
echo $LONGEST_CNT : $LONGEST_STR
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)