it-swarm.cn

将命令输出存储在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 '.')"
_

$(…)构造称为 命令替代

39
Tok

根据您使用的Shell,可以使用参数扩展。例如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 '.')

在某些字体中,反引号(也称为“重音符”)不可读。至少$(blahblah)语法要明显得多。

请注意,您可以在某些shell中将值通过管道传递到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