Зазвичай можна встановити змінну середовища для команди, префіксуючи її так:
hello=hi bash -c 'echo $hello'
Я також знаю, що ми можемо використовувати змінну для підстановки будь-якої частини виклику команди, наприклад:
$ cmd=bash
$ $cmd -c "echo hi" # equivalent to bash -c "echo hi"
Я дуже здивувався, дізнавшись, що ви не можете використовувати змінну для префіксації команди для встановлення змінної середовища. Тестовий випадок:
$ prefix=hello=hi
$ echo $prefix # prints hello=hi
$ $prefix bash -c 'echo $hello'
hello=hi: command not found
Чому я не можу встановити змінну середовища за допомогою змінної? Чи є префіксальна частина особливою частиною? Мені вдалося змусити його працювати, використовуючи eval спереду, але я досі не розумію, чому. Я використовую bash 4.4.
env
замість тогоeval
, який IIRC є більш безпечним, але повільніше.