Неверный статус выхода с присвоением локальной переменной
Пример ниже показывает, как, еслиtemp_file
сделанlocal
как часть той же линии, чтоmktemp
затем вызывается состояние выхода, полученное с помощью$?
всегда равен нулю, независимо от того, была ли команда выполнена успешно или нет (mktemp_xyz
используется для того, чтобы всегда выходить из строя). Еслиtemp_file
сделанlocal
заранее тогда$?
статус выхода, как и ожидалось.
Может кто-нибудь объяснить, что здесь происходит, пожалуйста?
#!/bin/bash
test_1()
{
local temp_file=$(mktemp_xyz -q -t "test.tmp.XXXXXX")
local make_temp_file_ret_val=$?
echo "temp_file: $temp_file"
echo "make_temp_file_ret_val: $make_temp_file_ret_val"
}
test_2()
{
local temp_file=""
temp_file=$(mktemp_xyz -q -t "test.tmp.XXXXXX")
local make_temp_file_ret_val=$?
echo "temp_file: $temp_file"
echo "make_temp_file_ret_val: $make_temp_file_ret_val"
}
test_1
echo ""
test_2
Выход:
$ ./test
./test: line 6: mktemp_xyz: command not found
temp_file:
make_temp_file_ret_val: 0
./test: line 16: mktemp_xyz: command not found
temp_file:
make_temp_file_ret_val: 127
Благодарю.