Lai*_*uan 20 bash command-line
我正在尝试安装RVM.有一个神奇的命令行:
bash < <(curl -s https://rvm.io/install/rvm)
Run Code Online (Sandbox Code Playgroud)
我知道bash和curl是什么.我知道第一个<是I/O重定向.但<()语法意味着什么?
这个命令和之间有什么区别
bash < `curl -s https://rvm.io/install/rvm`
Run Code Online (Sandbox Code Playgroud)
?(后一个命令不起作用)
Nem*_*emo 20
这是bash的进程替换.
表达式<(list)被文件名替换,无论是命名FIFO还是下面的条目/dev/fd.因此,要实际重定向输入,您必须使用< <(list).
[编辑; 忘了回答你的第二个问题]
反引号称为"命令替换".与进程替换不同,它是POSIX shell规范的一部分(即,不是bash扩展).shell在反引号中运行命令并在命令行上替换其输出.所以这是有道理的:
cat < `echo /etc/termcap`
Run Code Online (Sandbox Code Playgroud)
但这不会:
cat < `cat /etc/termcap`
Run Code Online (Sandbox Code Playgroud)
后者类似于你的例子; 它尝试使用命令的(复杂)输出作为重定向标准输入的文件名.
其他人已经很好地回答了你的问题.我只是添加一个例子来构建它们...... 99%的时候,当我个人使用时<(),它是在一次镜头中区分两个不同命令的输出.例如,
diff <( some_command ) <( some_other_command )