在 bash 中,php/{composer,sismo}
扩展为php/composer php/sismo
. 有没有办法用/bin/sh
系统外壳(我相信是破折号)来做到这一点?我正在编写git hooks并且希望尽可能远离 bash。
问问题
1091 次
3 回答
7
您可以使用printf
.
% printf 'str1%s\t' 'str2' 'str3' 'str4'
str1str2 str1str3 str1str4
于 2013-12-07T13:38:19.253 回答
4
好像没有办法。您将不得不使用循环来生成这些名称,也许在一个函数中。或者使用变量来替换公共部分,可能使用“set -u”来防止拼写错误。
我看到您出于性能原因更喜欢 dash,但是您似乎没有提供任何数字来证实您的决定。我建议您测量实际的性能差异并重新评估。您也可能会陷入过早的优化。考虑一下使用 Bash 将节省多少实现和调试时间与可能的性能下降。
于 2013-07-23T10:02:14.843 回答
0
我真的很喜欢printf
@mikeserv 提供的解决方案,但我想我会提供一个使用循环的示例。
如果您希望为每个扩展字符串执行一个命令,而不是将两个字符串作为 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
在上面的命令中没有引用,并注意这意味着它的内容是分词的(即,如果您的任何原始字符串包含空格,它将中断)。
于 2014-07-21T14:51:49.280 回答