为什么这个 bash 数组没有填充?我相信我过去也这样做过。回声${#XECOMMAND[@]}
显示无数据..
DIR=$1
TEMPFILE=/tmp/dir.tmp
ls -l $DIR | tail -n +2 | sed 's/\s\+/ /g' | cut -d" " -f5,9 > $TEMPFILE
i=0
cat $TEMPFILE | while read line ;do
if [[ $(echo $line | cut -d" " -f1) == 0 ]]; then
XECOMMAND[$i]="$(echo "$line" | cut -d" " -f2)"
(( i++ ))
fi
done
当你像这样运行 while 循环时
somecommand | while read ...
然后 while 循环在子 shell 中执行,即与主脚本不同的过程。因此,循环中发生的所有变量赋值都不会反映在主进程中。解决方法是使用输入重定向和/或命令替换,以便循环在当前进程中执行。例如,如果您想从文件中读取内容
while read ....
do
# do stuff
done < "$filename"
或者如果你不想要一个过程的输出,你可以这样做
while read ....
do
# do stuff
done < <(some command)
最后,在bash 4.2及以上版本中,您可以设置shopt -s lastpipe
,这会导致管道中的最后一个命令在当前进程中执行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)