Bash中的多参数花括号展开

Bash中的多参数花括号展开,bash,brace-expansion,Bash,Brace Expansion,我如何使用支架扩展来实现cal 8 2014的等效性;cal 9 2014?cal{8,9}2014扩展为cal 8,9 2014(显示9月9日)。cal{08 2014,09 2014}不是有效的大括号扩展,我不能使用cal{“08 2014”,“09 2014”},因为它扩展为cal“08 2014”“09 2014”这两个参数在这里显然没有什么意义:/我开始质疑大括号扩展的实用性….大括号扩展很好,因为循环也很好,但将printf | sh添加到您的曲目中 你的身体会很好: printf

我如何使用支架扩展来实现cal 8 2014的等效性;cal 9 2014?cal{8,9}2014扩展为cal 8,9 2014(显示9月9日)。cal{08 2014,09 2014}不是有效的大括号扩展,我不能使用cal{“08 2014”,“09 2014”},因为它扩展为cal“08 2014”“09 2014”这两个参数在这里显然没有什么意义:/我开始质疑大括号扩展的实用性….

大括号扩展很好,因为循环也很好,但将printf | sh添加到您的曲目中 你的身体会很好:

printf "cal %s 2014\n" {8,9}|sh
一个明显的好处是,你可以在没有sh的情况下运行它,先看看它是否正确

还可以转义空间,以便支架展开包括cal和2014:

$ echo cal\ {8,9}\ 2014\;
cal 8 2014; cal 9 2014;
然后管道通过sh:

$ echo cal\ {8,9}\ 2014\;|sh
    August 2014
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
   September 2014
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

大括号扩展很好,因为循环也很好,但将printf | sh添加到您的曲目和 你的身体会很好:

printf "cal %s 2014\n" {8,9}|sh
一个明显的好处是,你可以在没有sh的情况下运行它,先看看它是否正确

还可以转义空间,以便支架展开包括cal和2014:

$ echo cal\ {8,9}\ 2014\;
cal 8 2014; cal 9 2014;
然后管道通过sh:

$ echo cal\ {8,9}\ 2014\;|sh
    August 2014
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
   September 2014
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

大括号扩展很好,因为循环也很好,但将printf | sh添加到您的曲目和 你的身体会很好:

printf "cal %s 2014\n" {8,9}|sh
一个明显的好处是,你可以在没有sh的情况下运行它,先看看它是否正确

还可以转义空间,以便支架展开包括cal和2014:

$ echo cal\ {8,9}\ 2014\;
cal 8 2014; cal 9 2014;
然后管道通过sh:

$ echo cal\ {8,9}\ 2014\;|sh
    August 2014
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
   September 2014
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

大括号扩展很好,因为循环也很好,但将printf | sh添加到您的曲目和 你的身体会很好:

printf "cal %s 2014\n" {8,9}|sh
一个明显的好处是,你可以在没有sh的情况下运行它,先看看它是否正确

还可以转义空间,以便支架展开包括cal和2014:

$ echo cal\ {8,9}\ 2014\;
cal 8 2014; cal 9 2014;
然后管道通过sh:

$ echo cal\ {8,9}\ 2014\;|sh
    August 2014
Su Mo Tu We Th Fr Sa
                1  2
 3  4  5  6  7  8  9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
   September 2014
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

我不认为用大括号扩展可以做到这一点,但我打赌你可以用cal的
-A
(如
cal-A 1 8 2014
)解决你原来的问题。大括号扩展对于它预期的用途是有用的,但这些用途包括“仅在单个命令调用的参数内”,而您正试图调用两个命令。一个“明显的”解决方案是{8,9}中m的
;2014年不超过1000万加元;完成
(虽然只有两个月的时间,你可以在8 9中为m编写
;在2014年为cal$m编写
;完成
,并且
seq
也是一个非常有用的工具。我不认为你可以通过大括号扩展来实现这一点,但我打赌你可以用cal的
-a
(如
cal-a 18 2014
).Brace扩展对于其预期用途非常有用,但这些用途包括“仅在单个命令调用的参数内”,而您正在寻求调用两个命令。一个“明显”的解决方案是{8,9}中m的
;do cal$m 2014;done
(虽然只有两个月的时间,你就可以在8.9中为m编写
;在2014年为cal$m编写;在2014年完成
,并且
seq
也是一个非常有用的工具。我认为你不能通过大括号扩展来实现这一点,但我打赌你可以用cal的
-a
(如
cal-a 1.8 2014
).Brace扩展对于其预期用途非常有用,但这些用途包括“仅在单个命令调用的参数内”,而您正在寻求调用两个命令。一个“明显”的解决方案是{8,9}中m的
;do cal$m 2014;done
(虽然只有两个月的时间,你就可以在8.9中为m编写
;在2014年为cal$m编写;在2014年完成
,并且
seq
也是一个非常有用的工具。我认为你不能通过大括号扩展来实现这一点,但我打赌你可以用cal的
-a
(如
cal-a 1.8 2014
).Brace扩展对于其预期用途非常有用,但这些用途包括“仅在单个命令调用的参数内”,而您正在寻求调用两个命令。一个“明显”的解决方案是{8,9}中m的
;do cal$m 2014;done
(虽然只有两个月的时间,你就可以在89年为m编写
;2014年为m编写cal$m;完成
,并且
seq
也是一个非常有用的工具。以编程方式生成代码是一个雷区——编写通向
sh
的代码在道德上等同于
eval
,并且具有所有的功能。这里显示的个别案例是安全的,但不安全。)这对每个使用该实践的人来说都是正确的,这是有风险的。以编程方式生成代码是一个雷区——编写通过管道传输到
sh
的代码在道德上等同于
eval
,并且具有所有的风险。这里显示的个别案例是安全的,但假设对每个使用该实践的人来说都是正确的,这是有风险的。Programmatically生成代码是一个雷区——编写通向
sh
的代码在道德上等同于
eval
,并且具有所有的风险。这里显示的个别情况是安全的,但假设对每个使用该实践的人都是安全的。编程生成代码是一个雷区——编写通向
sh
的代码在道德上等同于
eval
,并且具有所有的风险。这里显示的个别案例是安全的,但假设对每个使用该实践的人都是如此是有风险的。