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