У меня есть функция Bash, которая имеет Perl-стиль «или умереть». Например,Как я могу вызвать функцию Bash без вызова подстановки команды?
#!/bin/bash
func1() {
local val
val=`cat foobar` || exit 7
echo "func1: cat returns $?"
}
myval=`func1`
echo "Line X should not be reached (retn = $? val = $myval)"
myval=$(func1)
echo "Line Y should not be reached (retn = $? val = $myval)"
func1
echo "Line Z should not be reached (retn = $?)"
Вызов функции непосредственно давайте мне рычаги exit
. Но если функция возвращает значение, которое я хочу использовать, замена команды не работает с exit
. То есть, выход просто сохраняется в возвращаемом значении $?
и выполняется следующая строка.
Запуск с опцией отладки -x
, по-видимому, подразумевает, что подстановка команд похожа на подоболочку, поскольку bash выводит на нее более глубокое вложение. Таким образом, exit
не относится к основному скрипту. Выход
Примера:
cat: foobar: No such file or directory
Line X should not be reached (retn = 7 val =)
cat: foobar: No such file or directory
Line Y should not be reached (retn = 7 val =)
cat: foobar: No such file or directory
Есть ли способ, чтобы вызвать func1 и использовать свой выход (в переменном, петле, если, и т.д.) в том же время усиливая короткое замыкание exit
?
Короткий ответ: Нет, вы не можете сделать оба сразу. –
Использовать 'return 1' вместо' exit' –
Подстановка команды не похожа на подоболочку; он явно создает подоболочку для запуска данной команды. – chepner