基本上我有以下场景例如
grep 'test: \K(\d+)' $file
=> 15grep 'test1: \K(\d+)' $file
=> 20
有什么方法可以将两个命令的结果存储到变量中,例如使用逗号作为分隔符,
Test="grep 'test: \K(\d+)' $file;grep 'test1: \K(\d+)' $file"
答案=eval $Test
预期输出:15,20
?
答案1
是的,您可以通过使用来做到这一点命令替换:
Test="$(grep 'test: \K(\d+)' $file),$(grep 'test1: \K(\d+)' $file)"
变量=$(..)
称为命令替换它的意思就是运行 shell 命令并将其输出存储到变量或使用echo
命令显示回来。例如,显示日期和时间:
echo "Today is $(date)"
并将其存储到变量中:
SERVERNAME="$(hostname)"
您可以连接到输出:
echo "$(hostname),$(date)"
结果将是:
yourhostname,Tue Jan 24 09:56:32 EET 2017
答案2
要将命令的输出放入变量中,请使用命令替换,这正是它的用途。使用eval
没有帮助(即使你正确使用它,这你不是)。
Test="$(grep 'test: \K(\d+)' "$file"; grep 'test1: \K(\d+)' "$file")"
输出是由换行符分隔的两个数字(假设每个模式恰好匹配一次)。它们由换行符分隔的原因是 grep 输出行(与任何其他工具一样),并且行始终以换行符结尾。第一个在末尾grep
打印换行符,第二个在末尾打印换行符,然后命令替换在末尾删除换行符。如果您想要逗号作为分隔符,请使用两个命令替换,并在其之间包含逗号:15
grep
20
Test="$(grep 'test: \K(\d+)' "$file"),$(grep 'test1: \K(\d+)' "$file")"