sys*_*yss 8 bash brace-expansion
为什么这是有效的:
mkdir /dir/test{1,2,3}
Run Code Online (Sandbox Code Playgroud)
这不是吗?
{chown httpd,chmod 700} /dir/test1
-bash: {chown: command not found
Run Code Online (Sandbox Code Playgroud)
我的 Bash 版本是:GNU bash,版本 4.2.46(2)-release
Kus*_*nda 11
您的大括号扩展无效。大括号扩展必须是shell 中的一个词。
单词是由不带引号的空格(或制表符或换行符,默认情况下){chown httpd,chmod 700}分隔的字符串,该字符串由三个单独的单词组成{chmod,http,chmod并且700}不会被识别为大括号扩展。
相反,shell 会将该行解释为{chown命令,并使用参数http,chmod,700}和执行/dir/test1。
测试这个最简单的方法是echo:
$ echo {chown httpd,chmod 700} /dir/test1
{chown httpd,chmod 700} /dir/test1
$ echo {"chown httpd","chmod 700"} /dir/test1
chown httpd chmod 700 /dir/test1
Run Code Online (Sandbox Code Playgroud)
请注意,即使您的大括号扩展有效,该命令也是无意义的。
只写两个命令,
chown http /dir/test1
chmod 700 /dir/test1
Run Code Online (Sandbox Code Playgroud)
因为,如手册页中所述,bash 将在将命令行拆分为单词后对每个单词执行大括号扩展。
因此,该命令行将首先拆分为{chown,httpd,chmod和700}, 然后,由于{chown不是有效的大括号扩展模式,它将保持原样,bash 将尝试运行具有该名称的命令。
这是手册页中的引用:
将其拆分为单词后在命令行上进行扩展。执行的扩展有七种:大括号扩展、波浪号扩展、参数和变量扩展、命令替换、算术扩展、分词和路径名扩展。
注意顺序,与其他shell不同(在 中zsh,大括号扩展会在算术扩展后进行,完全不会进行额外的分词)。
以下内容将1 2在zsh或 中打印ksh,并x y在bash:
f=; f1=x; f2=y; echo $f{1,2}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1928 次 |
| 最近记录: |