与使用here字符串相比,使用bash -c有什么优势?


11

使用bash -c 'some command'过度使用有什么真正的好处bash <<< 'some command'

它们似乎达到了相同的效果。



嗨,@ Patrick,感谢您的通知。我真的不确定最好的发布位置在哪里。因为,一方面,这是一个Linux问题,但另一方面,bash是一种脚本语言,而另一个网站则吸引了更多访问者。在这种情况下,更合适的位置在哪里?
yosefrow

4
@yosefrow:哪一个站点都可以,恕我直言;但是交叉发布却令人讨厌(您要让两个站点上的人都花时间在您的问题上,而不会给他们彼此的答案带来好处)。
ruakh

那么从其中一个站点删除帖子是否合适?
yosefrow

2
另一个较小的区别是,bash -c '...'它将在没有herestrings的shell中工作。您假设将在bash shell中调用bash,但这并非总是如此。
Joel Cornett

Answers:


21

bash -c 'some command'保留对调用方标准输入的访问权限,因此read从标准输入读取的命令将正常运行。bash <<< 'some command'用传入的行替换该输入,bash -c cat然后bash <<< cat做不同的事情。

$ bash -c cat
abc
abc
^D
$ bash <<< cat
$

另一方面,$'...'如果您非常小心的话,可以利用该功能来提供自己的标准输入,以供通过使用:

$ bash <<< $'read x y\nabc def ghi\necho $y'
def ghi
$

我不想依靠它,但是有时可能很方便。


bash -c还允许将参数传递给脚本并$0进行设置:

bash -c 'some command' sh abc def

将设置$1abc$2def里面some command


3
语法错误也会产生略有不同的措辞。主要bash -c提到的-c是AFAIK。并非完全没有意义,因为这可以帮助您追踪它们。bash <<< 'script'错误看起来就像父脚本中的错误;bash -c 'script'那些没有。您甚至可以为它们加上标签:bash -c 'script' label
derobert

好吧,也bash <<< 'echo $1' /dev/stdin foo可以工作并打印foo。虽然设置$0有些受限。
ilkkachu

bash <<< 'echo "$1"' /dev/stdin foo并不总是有效。我bash <<< 'echo "$1"' -s foo去上班了
G-Man说'Resstate Monica'17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.