捕获命令行输出的方法有两种bash
:
旧版Bourne贝壳反引号
``
:var=`command`
$()
语法(据我所知,它是特定于Bash的,或者至少不受非POSIX旧shell(例如原始Bourne)支持)var=$(command)
与反引号相比,使用第二种语法有什么好处?还是两个完全等于100%?
$()
在别名中使用和反引号的说明。如果您在alias foo=$(command)
中,.bashrc
则将command
在.bashrc
解释过程中运行alias命令本身时执行。使用alias foo=`command`
,command
将在每次运行别名时执行。但是,如果您$
使用$()
形式(例如alias foo=\$(command)
)对进行转义,则每次运行别名时也将执行它,而不是在.bashrc
解释期间执行。据我所知,通过测试还是可以的。我无法在解释该行为的bash文档中找到任何东西。
`command`
command
也只能执行一次。我检查了一下:function aaa(){printf date; 回声aaa >>〜/ test.txt; }别名test1 = aaa
。无论test1
执行别名()多少次,函数aaa仅执行一次(每次登录后)。我使用了.bashrc(在Debian 10上)。
$()
是POSIX,并且受所有现代Bourne外壳的支持,例如ksh,bash,ash,dash,zsh,busybox,您都可以命名。(不是那么现代的是Solaris/bin/sh
,但是在Solaris上,您一定要使用现代的/usr/xpg4/bin/sh
)。