我试图找到其中最多的字符的路径名。可能有更好的方法来做到这一点。但我想知道为什么这个问题发生。
- 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