09/11/23 18:22:28
>>621 ありがとう。man bash読みました。
組み込みコマンドでの、optional variable assignmentの挙動についてまとめてみました。
COMMAND EXECUTION ENVIRONMENT節に以下の記述があります。
When a simple command other than a builtin or shell function is to be
executed, it is invoked in a separate execution environment
つまり組み込みコマンドはseparate execution environmentで呼び出されない。
これは当たり前のことで、組み込みコマンドは別シェルで実行されないということですよね。
そして個人的に新たに知ったのは、optional variable assignmentは別シェルにしか
伝えられないということです。(現在のシェル変数には代入されない)
だから、>>615で $ LC_ALL=da_DK printf "%'d\n" "123456789"
がコンマ区切りにならなかったんですね。
だったら、敢えてシェル変数を伝えられた実行環境を作って、printfするとどうなるか。
#include <stdlib.h>
int main()
{
system("printf \"%s\n\" \"$LC_NUMERIC\"");
system("printf \"%'d\n\" \"123456789\"");
return 0;
}
をコンパイルしたa.outに対して試してみました。
(a.outは組み込みコマンドではないので別シェルで実行され、
optional variable assignmentが伝えられる)