为什么这有效:
mkdir /dir/test{1,2,3}
这不是吗?
{chown httpd,chmod 700} /dir/test1
-bash: {chown: command not found
我的 Bash 版本是:GNU bash,版本 4.2.46(2)-release
为什么这有效:
mkdir /dir/test{1,2,3}
这不是吗?
{chown httpd,chmod 700} /dir/test1
-bash: {chown: command not found
我的 Bash 版本是:GNU bash,版本 4.2.46(2)-release
您的大括号扩展无效。大括号扩展必须是 shell 中的一个单词。
单词是由不带引号的空格(或制表符或换行符,默认情况下)分隔的字符串,该字符串
{chown httpd,chmod 700}
由三个单独的单词组成{chmod
,http,chmod
并且700}
不会被识别为大括号扩展。相反,shell 会将该行解释为一个
{chown
命令,使用参数和http,chmod
执行。700}
/dir/test1
最简单的测试方法是
echo
:请注意,即使您的大括号扩展有效,该命令也是无意义的。
只写两条命令,
因为,如手册页中所述,bash 将在将命令行拆分为单词后对每个单词执行大括号扩展。
因此,该命令行将首先拆分为
{chown
,httpd,chmod
和700}
,然后,由于{chown
不是有效的大括号扩展模式,它将保持原样,bash 将尝试运行具有该名称的命令。这是手册页中的引用:
注意顺序,这与其他 shell 不同(在 中
zsh
,大括号扩展将在算术扩展之后执行,并且根本不会执行额外的分词)。以下将打印
1 2
在zsh
orksh
和x y
in 中bash
:其他答案已经解释了为什么大括号扩展不起作用。暂时忽略这个问题,您可能希望避免重复文件名,还有其他方法可以做到这一点。将文件名分配给变量,或使用
$_
特殊变量(它包含上一个命令的最后一个 shell 字):或者