我试图将命令的值保存到变量中,但它给出了错误
var = `cat $1 | grep "STAN: \[$2\]" | awk -F '|' '{print $3; exit}'`
它给了我错误
var: command not found
答案1
是的,这会给你一个错误,因为=
in 变量赋值不能被 shell 中的空格包围。 shell 会解释该行,因为您想要运行使用var
参数调用的命令=
以及命令替换返回的任何内容(在另外将结果拆分为单词并对这些单词应用文件名通配之后,因为它没有被引用)。
相反,使用
var=$( awk -F '|' -v str="$2" '$0 ~ "STAN: \\[" str "\\]" { print $3; exit }' "$1" )
我还冒昧地删除了 和grep
,cat
并将使用反引号的已弃用命令替换更改为使用反引号$( ... )
。
您还可以使用grep
,cut
和 来做到这一点head
:
var=$( grep -e "STAN: \[$2\]" "$1" | head -n 1 | cut -d '|' -f 3 )
或者,如果您grep
可以-m
选择在特定数量的比赛后停止:
var=$( grep -m 1 -e "STAN: \[$2\]" "$1" | cut -d '|' -f 3 )
或者,如果您要搜索的表达式实际上是字符串而不是正则表达式:
var=$( grep -m 1 -F -e "STAN: [$2]" "$1" | cut -d '|' -f 3 )