我有一个操作,cut
我想将结果分配给一个变量
var4=echo ztemp.xml |cut -f1 -d '.'
我收到错误:
ztemp.xml 不是命令
的值var4
永远不会被分配;我试图将其分配给它的输出:
echo ztemp.xml | cut -f1 -d '.'
我怎样才能做到这一点?
答案1
答案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"