Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash “$(…)”和“(…)”之间有什么区别?_Bash_Shell_Sh - Fatal编程技术网

Bash “$(…)”和“(…)”之间有什么区别?

Bash “$(…)”和“(…)”之间有什么区别?,bash,shell,sh,Bash,Shell,Sh,美元和美元的区别是什么。。。和也许吧。来源 在编写shell脚本的一开始,我就学到了$。。。如果我想使用命令的输出,例如,对于变量: size=$( wc -c < /path/to/file ) 有趣的是,它也适用于$,但给出了一条神秘的错误消息scriptname:line 1::Command not found.: 为什么$。。。不是两种用例都能完美地工作吗?考虑到错误消息,我猜原因是:$。。。强制在shell上甚至有一个空输出,尽管没有,但是。。。只执行命令,不关心输出。是这样

美元和美元的区别是什么。。。和也许吧。来源

在编写shell脚本的一开始,我就学到了$。。。如果我想使用命令的输出,例如,对于变量:

size=$( wc -c < /path/to/file )
有趣的是,它也适用于$,但给出了一条神秘的错误消息scriptname:line 1::Command not found.:

为什么$。。。不是两种用例都能完美地工作吗?考虑到错误消息,我猜原因是:$。。。强制在shell上甚至有一个空输出,尽管没有,但是。。。只执行命令,不关心输出。是这样吗

我知道也有。使用其别名源在当前shell中执行命令,该shell似乎更类似于$,关于功能

还是两者之间有更多的区别。和而不仅仅是在我不知道的当前或子shell中执行命令?

$cmd执行cmd,然后尝试执行其输出。所以

$( echo -e "a lot of data, if everything worked... ;-)" > /path/to/file )
执行将数据写入/path/to/file且不生成输出的命令。shell获取该输出的空字符串并尝试执行它,生成您看到的错误消息。

$cmd执行cmd,然后尝试执行其输出。所以

$( echo -e "a lot of data, if everything worked... ;-)" > /path/to/file )

执行将数据写入/path/to/file且不生成输出的命令。shell获取输出的空字符串并尝试执行它,产生您看到的错误消息。

无论是否在子shell中运行命令,在shell执行这些命令后,都不涉及与shell本身的任何交互

$echo-echo-poo 回声便便 相反,命令替换在完成后由shell进行计算:

$$echo-echo-poo 便便 $var=$echo-echo-poo $echo$var 回声便便 $$echo$var扩展到第一行,但不必要地冗余 便便 $$var是前一行的更简洁版本 便便 当然,如果重定向命令替换的输出,shell将计算一个空字符串

这个。命令,或者在Bash和其他一些非POSIX shell中,其同义词源计算文件中的一系列命令。从某种意义上讲,这与命令替换大致相似,但后者允许您捕获和操作计算结果,从某种意义上讲,shell的全部目的是计算表达式

命令替换实际上可以用于计算任意位置的表达式,而。或者,子shell只能在shell接受命令的情况下使用。看看这些体操:

$$echo e$echo c$echo h$echo o poo 便便 $echo p$printf x | wc-l | tr-d''| tr'1''o'o'o 便便 $ech$echo poo 便便 正如您所发现的,当您希望一组命令共享一些文件描述符时,子shell可能很有用

printf“%s\n”主题:hello\ 'MIME版本:1.0'\ '内容类型:应用程序/八位字节流'\ '内容传输编码:base64'\ base64二进制文件| sendmail-oiyou@example.net 或者如果你想限制一些环境变化的范围

for subdir in */; do
  ( cd "$subdir"
    condiments=$(cat spice.txt)
    export condiments
    make -s dinner )
# back in parent dir
# $condiments is back to its old value
# probably unset, and not exported
done

无论是否在子shell中运行命令,在shell执行这些命令后,都不涉及与shell本身的任何交互

$echo-echo-poo 回声便便 相反,命令替换在完成后由shell进行计算:

$$echo-echo-poo 便便 $var=$echo-echo-poo $echo$var 回声便便 $$echo$var扩展到第一行,但不必要地冗余 便便 $$var是前一行的更简洁版本 便便 当然,如果重定向命令替换的输出,shell将计算一个空字符串

这个。命令,或者在Bash和其他一些非POSIX shell中,其同义词源计算文件中的一系列命令。从某种意义上讲,这与命令替换大致相似,但后者允许您捕获和操作计算结果,从某种意义上讲,shell的全部目的是计算表达式

命令替换实际上可以用于计算任意位置的表达式,而。或者,子shell只能在shell接受命令的情况下使用。看看这些体操:

$$echo e$echo c$echo h$echo o poo 便便 $echo p$printf x | wc-l | tr-d''| tr'1''o'o'o 便便 $ech$echo poo 便便 正如您所发现的,当您希望一组命令共享一些文件描述符时,子shell可能很有用

printf“%s\n”主题:hello\ 'MIME版本:1.0'\ '内容类型:应用程序/八位字节流'\ '内容传输编码:base64'\ base64二进制文件| sendmail-oiyou@example.net 或者如果你想限制一些环境变化的范围

for subdir in */; do
  ( cd "$subdir"
    condiments=$(cat spice.txt)
    export condiments
    make -s dinner )
# back in parent dir
# $condiments is back to its old value
# probably unset, and not exported
done
是的,我知道。。。我使用和作为标签。这是因为我目前使用的是bash,但我希望脚本尽可能符合POSIX!| |。。。因此,如果t
这里有什么?可能是蛋糕上的糖霜。顺便说一句,echo-e不是由POSIX定义的。@MateuszPiotrowski:我知道这会被提及的!:-幸运的是,“-e”似乎被忽略了,并且没有产生错误,所以它对这两种情况都适用。是的,我知道。。。我使用和作为标签。这是因为我目前使用的是bash,但我希望脚本尽可能符合POSIX!| |。。。因此,如果两者之间存在差异,那么处理好它们将是锦上添花。顺便说一句,echo-e不是由POSIX定义的。@MateuszPiotrowski:我知道这会被提及的!:-D | |幸运的是,`-e`似乎被忽略了,并且没有产生任何错误,所以它对这两种情况都起作用。为什么$echo echo poo会产生poo,但将完全相同的结果写入echo poo变量仍然让我有点困惑我想答案是,这与命令执行的频率有关。。。这似乎有点像用$resp筑巢。因为命令替换的输出是echo poo,它被替换在shell将作为命令计算的位置。这与$echo e$echo c等的其他示例一样。类似地,$echo nano fnord.txt将生成输出nano fnord.txt,然后作为命令进行计算,nano将在文件fnord.txt上运行。我并不特别推荐nano,但对于初学者来说,它比真正的编辑器更容易摆脱。。。和大致相同,但$。。。是否立即执行-/不,一点也不。两者都会立即执行。关键的区别在于,$的输出。。。获取由shell计算的值。这就是这个答案的前几句话。我接受了你建议的编辑,但将变量作为代码计算通常不是一个好主意。为什么$echo echo poo会产生poo,但将完全相同的结果写入echo poo变量仍然让我有点困惑我想答案是,这与命令执行的频率有关。。。这似乎有点像用$resp筑巢。因为命令替换的输出是echo poo,它被替换在shell将作为命令计算的位置。这与$echo e$echo c等的其他示例一样。类似地,$echo nano fnord.txt将生成输出nano fnord.txt,然后作为命令进行计算,nano将在文件fnord.txt上运行。我并不特别推荐nano,但对于初学者来说,它比真正的编辑器更容易摆脱。。。和大致相同,但$。。。是否立即执行-/不,一点也不。两者都会立即执行。关键的区别在于,$的输出。。。获取由shell计算的值。这就是这个答案的前几句。我接受了你建议的编辑,但将变量作为代码进行计算通常不是一个好主意。