here文字列を使用するよりもbash -cを使用する利点は何ですか?


11

使用bash -c 'some command'するよりも使用することには実際にメリットがありますかbash <<< 'some command'

彼らは同じ効果を達成するようです。



こんにちは@Patrickお知らせありがとうございます。投稿するのに最適な場所がどこなのか本当にわかりませんでした。なぜなら、これは一方ではLinuxに関する質問ですが、他方ではbashは一種のスクリプト言語であり、もう一方のサイトにはより多くの訪問者がいるからです。このような場合、どこに投稿するのが適切でしょうか?
yosefrow 2017年

4
@yosefrow:どちらのサイトでも問題ありませんでした。しかし、クロスポストは不愉快です(両方のサイトのユーザーに、お互いの答えのメリットを与えることなく、質問に時間をかけるように依頼しています)。
ruakh 2017年

では、いずれかのサイトから投稿を削除するのが適切でしょうか?
yosefrow 2017年

2
もう1つの小さな違いは、bash -c '...'ヘレストリングを持たないシェルで機能することです。あなたはbashがbashシェル内で呼び出されると想定していますが、常にそうであるとは限りません。
Joel Cornett 2017年

回答:


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して$2までdef内部some command


3
構文エラーも、わずかに異なる表現を生成します。主に彼らがbash -c言及していることは-c、私の知る限り。それらを追跡するのに役立つので、完全に無意味ではありません。bash <<< 'script'エラーは親スクリプトのエラーと同じように見えます。bash -c 'script'ありません。ラベルを付けることもできますbash -c 'script' label
derobert

まあ、bash <<< 'echo $1' /dev/stdin fooあまりにも動作し、印刷しfooます。設定$0は多少制限がありますが。
ilkkachu 2017年

bash <<< 'echo "$1"' /dev/stdin foo常に機能するとは限りません。私はbash <<< 'echo "$1"' -s foo働かなければなりませんでした。
G-Manは 'Reinstate Monica'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.