Thông thường, có thể đặt biến môi trường cho lệnh bằng cách thêm tiền tố vào như sau:
hello=hi bash -c 'echo $hello'
Tôi cũng biết rằng chúng ta có thể sử dụng một biến để thay thế bất kỳ phần nào của lệnh gọi như sau:
$ cmd=bash
$ $cmd -c "echo hi" # equivalent to bash -c "echo hi"
Tôi đã rất ngạc nhiên khi phát hiện ra rằng bạn không thể sử dụng một biến để tiền tố một lệnh để đặt một biến môi trường. Trường hợp thử nghiệm:
$ prefix=hello=hi
$ echo $prefix # prints hello=hi
$ $prefix bash -c 'echo $hello'
hello=hi: command not found
Tại sao tôi không thể đặt biến môi trường bằng biến? Là phần tiền tố là một phần đặc biệt? Tôi đã có thể làm cho nó hoạt động bằng cách sử dụng eval ở phía trước, nhưng tôi vẫn không hiểu tại sao. Tôi đang sử dụng bash 4.4.
env
thay vìeval
, IIRC nào an toàn hơn, nhưng chậm hơn.