首页 > 解决方案 > 在 bash 脚本中读取的 While 循环

问题描述

我有一个 bash 脚本

OLDIFS=$IFS
echo "Debugging: $1"
IFS=' '
frst=true
EXECPATH=$(file $1 | sed -r "s/^.*execfn: '([^']*)'.*$/\1/")
while read x id path x exec
do
    if [ $frst = true ];then
        frst=false
        path=$exec
    fi
.
.

有人可以解释一下while read x id path x exec是什么吗?我知道read读取输出并将其分配给变量,但为什么我有两个x

脚本被称为./myScrpt.sh 'ls filename'

标签: bashwhile-loopsh

解决方案


请注意,x从未使用过;它只是一个虚拟变量,用于捕获您不关心的字段,以便执行的字段拆分read将所需的值分配给idpathexec

_更常用作这样的假人。此外,最好简单地覆盖命令的值,IFSread不是全局覆盖它并(尝试)稍后恢复它的值。

echo "Debugging: $1"
frst=true
EXECPATH=$(file "$1" | sed -r "s/^.*execfn: '([^']*)'.*$/\1/")
while IFS=' ' read _ id path _ exec
do
    if [ "$frst" = true ];then
        frst=false
        path=$exec
    fi
.
.

推荐阅读