bash -cコマンド解析

bash -cコマンド解析

Bashのマンページでは、このオプションを次のように説明します-c

-c -cオプションがある場合は、オプションではなく最初の引数command_stringからコマンドを読み取ります。 command_stringの後に引数がある場合、最初の引数は$ 0に割り当てられ、残りの引数は位置引数に割り当てられます。 $ 0の指定は、警告メッセージとエラーメッセージに使用されるシェルの名前を設定します。

上記から、次のコードは出力で同じと予想されます。

# or possibly (`bash -c date date +%z`)
$ bash -c date +%z
Wed Oct 18 10:02:47 PM UTC 2023
$ date +%z
+0000
# The first command gives the output of `date` without the format specifier.

しかし、私のbash(GNU bash、バージョン5.2.15)は、追加のコマンドライン位置引数を評価しないようです。オプションの後の最初の引数以降のすべての項目は-c自動的に削除されます。たぶん私はマニュアルページを誤解したかもしれません。

bash -c文字列()以外の単語(デフォルトのargベクトル)でコマンドに複数の引数を渡すにはどうすればよいですかbash -c "date +%z"?可能ですか?

コンテキスト

この質問の目的は、bashがコマンド引数を渡してexecve()他のプログラム(ラッパーシェル)の関数系列の1つを介してbashに正しく入力できることを理解することです。

ベストアンサー1

最初のパラメータは$ 0に割り当てられます。

$ 0は最初のパラメータではなく、$ 1は最初のパラメータです。また、コマンド文字列のパラメータを使用する必要があります。

bash -c 'date "$1"' zero +%z

おすすめ記事