在bash中,php/{composer,sismo}
扩展为php/composer php/sismo
。有没有办法用/bin/sh
(我相信是破折号),系统shell?我正在写git hooks和would like to stay away from bash as long as I can。
答案 0 :(得分:6)
您可以使用printf
。
% printf 'str1%s\t' 'str2' 'str3' 'str4'
str1str2 str1str3 str1str4
答案 1 :(得分:4)
似乎没有办法。您将不得不使用循环来生成这些名称,可能在函数中。或者使用变量替换常用部分,也可以使用“set -u”来防止拼写错误。
我认为您出于性能原因更喜欢破折号,但是您似乎没有提供任何数字来证实您的决定。我建议你测量实际的性能差异并重新评估。你也可能因为过早的优化而堕落。考虑使用Bash与可能的性能下降可以节省多少实现和调试时间。
答案 2 :(得分:0)
我非常喜欢@mikeserv提供的printf
解决方案,但我想我会提供一个使用循环的示例。
如果您希望为每个扩展字符串执行一个命令,而不是将两个字符串作为同一命令的args提供,则下面可能最有用。
for X in composer sismo; do
echo "php/$X" # replace 'echo' with your command
done
然而,您可以将其重写为
ARGS="$(for X in composer sismo; do echo "php/$X"; done)"
echo $ARGS # replace 'echo' with your command
请注意,$ARGS
在上面的命令中没有引用,并且请注意这意味着它的内容是有字拼写的(即如果您的原始字符串包含空格,它将会中断)。