it-swarm-ru.tech

Сохранение вывода команды в переменной Shell

У меня есть операция с использованием cut, которую я хотел бы присвоить результат переменной

var4=echo ztemp.xml |cut -f1 -d '.'

Я получаю ошибку:

ztemp.xml не является командой

Значение var4 никогда не назначается; Я пытаюсь назначить вывод:

echo ztemp.xml | cut -f1 -d '.'

Как я могу это сделать?

27
Vass

Вы хотите изменить свое назначение следующим образом:

_var4="$(echo ztemp.xml | cut -f1 -d '.')"
_

Конструкция $(…) известна как команда susbtitution .

39
Tok

В зависимости от используемой вами оболочки вы можете использовать расширение параметров. Например, в bash:

   ${parameter%Word}
   ${parameter%%Word}
          Remove matching suffix pattern.  The Word is expanded to produce
          a pattern just as in pathname expansion.  If the pattern matches
          a trailing portion of the expanded value of parameter, then  the
          result  of the expansion is the expanded value of parameter with
          the shortest matching pattern (the ``%'' case)  or  the  longest
          matching  pattern  (the ``%%'' case) deleted.  If parameter is @
          or *, the pattern removal operation is  applied  to  each  posi‐
          tional  parameter  in  turn,  and the expansion is the resultant
          list.  If parameter is an array variable subscripted with  @  or
          *,  the  pattern  removal operation is applied to each member of
          the array in turn, and the expansion is the resultant list.

В вашем случае это означало бы сделать что-то вроде этого:

var4=ztemp.xml
var4=${var4%.*}

Обратите внимание, что символ # ведет себя аналогично с префиксной частью строки.

9

Ksh, Zsh и Bash предлагают другой, возможно, более четкий синтаксис:

_var4=$(echo ztemp.xml | cut -f1 -d '.')
_

Бэктикс (a.k.a. "Могильный акцент") не читается в некоторых шрифтах. Синтаксис $(blahblah), по крайней мере, намного более очевиден.

Обратите внимание, что вы можете передать значения в команду read в некоторых оболочках:

_ls -1 \*.\* | cut -f1 -d'.' | while read VAR4; do echo $VAR4; done
_
8
Bruce Ediger

Это еще один способ присвоения переменной, который хорошо использовать с некоторыми текстовыми редакторами, которые не могут правильно выделить каждый сложный код, который вы создаете.

read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"
3
Aquarius Power