当我需要使用不同的参数多次运行命令时,我使用了这种方法(完全不了解它):
touch {a,b,c}
这相当于:
touch a touch b touch c
我认为使用以下循环可以实现同样的目的:
for file in {a,c}; do touch $file; done
但是,我偶然发现了一个不起作用的情况:
pear channel-discover {"pear.PHPunit.de","pear.symfony-project.com"}
我有几个问题:
>第一个例子中发生了什么的名称是什么,到底发生了什么?
>将此方法用于简单事物而不是for-in循环是否更好?
>为什么pear命令不能那样工作?命令脚本应该实现一些处理这些参数的技术,还是shell负责这个?
这称为
Brace Expansion,它扩展为给定字符串的空格分隔列表.
所以触摸{a,c}就相当于
touch a b c
触摸{a,c} x相当于:
touch ax bx cx
你的pear命令基本上可以运行为:
pear channel-discover pear.PHPunit.de pear.symfony-project.com
这可能不是你所期望的.如果您希望为每个字符串运行一次命令,请使用for循环(它回答您的第二个问题),或使用大括号扩展和xargs的组合.