在bash
提示符下,我得到了一些令人惊讶的结果。
这是一些数据:
echo "version = blahblah" > xxx
我想这样做:
printf "%s (%s)\n" `grep '^version =' xxx` "something"
我期望是:
version = blahblah (something)
相反,我得到了:
version (=)
blahblah (something)
有人可以弄清楚为什么我要得到这个吗?
答案 0 :(得分:3)
使用$(...)
进行命令替换,并且必须引用它:
printf "%s (%s)\n" "$(grep '^version =' xxx)" "something"
在不引用printf
的情况下,将grep
命令的空格分隔输出视为printf
的不同参数。
答案 1 :(得分:2)
因为格式说明符与您定义的说明符和printf
看到的参数数量不匹配。与
printf "%s (%s)\n"
# ^^^ ^^^
上面,该命令除了两个字符串序列后跟换行符。但是您对printf()
的争论远不止于此
version = blahblah something
# (1) (2) (3) (4)
因此printf()
看到说明符和参数之间的不匹配,并在第二个参数=
printf '%s (%s)\n' 'version' '=' 'blahblah' 'something'
由于您的期望是将version =
打印在一个字符串中,因此像anubhava's answer一样在一个字符串中生成整个grep
输出,这样您的printf
会将参数视为下面
printf '%s (%s)\n' 'version = blahblah' 'something'