破折号相当于bash的花括号语法?

时间:2013-07-23 09:48:36

标签: dash-shell

在bash中,php/{composer,sismo}扩展为php/composer php/sismo。有没有办法用/bin/sh(我相信是破折号),系统shell?我正在写git hookswould like to stay away from bash as long as I can

3 个答案:

答案 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在上面的命令中没有引用,并且请注意这意味着它的内容是有字拼写的(即如果您的原始字符串包含空格,它将会中断)。