为什么不支持大括号扩展?


9

我是否需要进行任何配置才能开始撑杆扩展?当我运行时mkdir {1..10},它只是创建一个目录命名{1..10}


mkdir {1..10}为我工作,它会产生十个目录。
嫌疑犯

2
我建议添加echo ${SHELL}以使该问题能够得到有用的答案。
2015年

Answers:


10

虽然括号展开类似{1,2}的起源csh在70年代末,并发现其方式类似Bourne在壳bash/ zsh/ pdksh在80年代末,90年代初,{n1..n2}变异后传来首先在zsh1995年(2.6 BETA4)。

bash在2004年(3.0)和ksh932005年(ksh93r)复制了它。

您尝试使用的shell可能既不是这些也不是bashand 的旧版本ksh93


我们应该对他使用哪种shebank外壳感到满意。/ me怀疑是#!/bin/sh……
polemon

3
@polemon,不一定有帮助。例如,在某些系统上/bin/shbashksh93
斯特凡Chazelas

2
其实,我认为这将:这取决于调用,调用炮弹作为/bin/sh 行为的历史sh(这是bash的手册页说什么反正)。尚未检查ksh的手册页,但我敢肯定它会相应地工作。
polemon 2013年

1
@ user43312:为什么仍在使用RH9?多年来一直未进行维护。正如Stephane所写,这是最新bash版本的功能。因此,您的bash版本不太可能支持它。您可以使用bash --version检查版本。并且只是通过检查$ SHELL变量或仅运行ps来确保是否正在运行bash shell。要使用此功能,您可能首先尝试启动zsh shell(zsh)。另一个解决方法是使用类似“ mkdir $(seq 1 10)”的名称。
Bram 2013年

1
@polemon 另一个shell 的启动行为(即,它在启动时从哪个文件中获取),而不是模仿另一个shell。
克里斯·

4

{x..y}范围括号扩展在bash 3.0-alpha中实现。为了帮助我们和您自己,请显示您的echo "$BASH_VERSION"输出。

然后是答案:如果 mkdir {1..10}使用名称创建目录,{1..10}那么您正在使用bash版本before bash 3.0-alpha。在这种情况下,您可以使用for循环构造:

for ((i=1;i<=10; i++)); do mkdir "$i"; done


1

检查您的Bash版本:

$ bash -version
GNU bash, version 4.1.7(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

还要mkdir以某种奇怪的方式检查它是否不是别名:

$ alias |grep mkdir
alias md='mkdir'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.