2016-06-13 17 views
0

我想将保存在bash变量中的整数传递给git show --format,我该怎么做?
当我传递变量时,git格式化程序将它视为一个文字,并且不检索其值,而是输出变量的名称。
我写了一个脚本,做一些处理,但为了简便起见,我将粘贴脚本的相关部分:将bash变量传递给git格式化程序

git show -s --format='%C(yellow)commit %H%C(reset) %C(magenta bold)(commit message lines: $lines)%C(reset)%n%B' $i 

目前,它输出类似:

commit 6fc73ae81627edf220d3005eafbdd3d7f5f898d7 (commit message lines: $lines) 
Fix foo 

Fixing foo consisted of: 
- Fixing bar 
- Fixing baz 

我想它输出是:

commit 6fc73ae81627edf220d3005eafbdd3d7f5f898d7 (commit message lines: 5) 
Fix foo 

Fixing foo consisted of: 
- Fixing bar 
- Fixing baz 

回答

1

你可以跳出单引号,附加你的变量,然后恢复单引号。只要有一个在之间没有空格,shell将其当作一个单一值(见word splitting):

--format='%C(yellow)commit %H%C(reset) %C(magenta bold)(commit message lines: '"$lines"')%C(reset)%n%B' 
+0

谢谢,按预期工作。 感谢您的链接,有用的知道。我会尽快将此答案标记为已接受。 –

1

因为这是安全的引用格式字符串用双引号代替单引号这种特殊情况下:

git show -s --format="%C(yellow)commit %H%C(reset) %C(magenta bold)(commit message lines: $lines)%C(reset)%n%B" $i 

在双引号内壳进行变量扩展,单引号里面没有:

> echo "HOME=$HOME" 
HOME=/home/leon 
> echo 'HOME=$HOME' 
HOME=$HOME 
+0

虽然这是一个有用的提示,但它不提供解决方案或建议我如何解决我的问题。 –

+0

@PetrusK。在双引号内部,shell执行变量扩展,在单引号内部不执行。查看更新后的答案中的示例。 – Leon

+0

谢谢,我最终在脚本中使用了您的解决方案,因为它比使用单引号更简洁。 –