我试图找到其中最多的字符的路径名。可能有更好的方法来做到这一点。但我想知道为什么这个问题发生。
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不会使这些变量全局?
当你进入Bash的while循环时,它会创建一个subshell。当subshell退出时,所有变量返回到其先前的值(可以为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