Пока цикл с чтением в скрипте bash - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть скрипт 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'

1 Ответ

0 голосов
/ 04 декабря 2018

Обратите внимание, что x никогда не используется;это просто фиктивная переменная для захвата полей, которые вам не нужны, так что разделение полей, выполняемое read, присваивает нужные значения id, path и exec.

_ чаще используется в качестве такого манекена.Кроме того, лучше просто переопределить значение IFS только для команды read, чем переопределить его глобально и (попытаться) восстановить его значение позже.

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
.
.
...