将命令的输出存储在 shell 变量中

将命令的输出存储在 shell 变量中

我有一个操作,cut我想将结果分配给一个变量

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

我收到错误:

ztemp.xml 不是命令

的值var4永远不会被分配;我试图将其分配给它的输出:

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

我怎样才能做到这一点?

答案1

您需要将作业修改为:

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

$(…)构造被称为命令替换

答案2

根据您使用的 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%.*}

请注意,字符#在字符串的前缀部分的行为方式类似。

答案3

Ksh、Zsh 和 Bash 都提供了另​​一种或许更清晰的语法:

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

反引号(又名“重音”)在某些字体中不可读。语法$(blahblah)至少更加明显。

请注意,您可以read在某些 shell 中将值通过管道传输到命令中:

ls -1 \*.\* | cut -f1 -d'.' | while read VAR4; do echo $VAR4; done

答案4

这是分配变量的另一种方法,非常适合与某些无法正确突出显示您创建的每个复杂代码的文本编辑器一起使用。

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

相关内容