Вам нужно
#!/bin/ksh
func1()
{
print -- 4
}
[[ $(func1) = 4 ]] && print "function result = 4"
ИЛИ
#!/bin/ksh
func1()
{
return 4
}
func1 ; [[ $? == 4 ]] && print "function result = 4"
Есть несколько проблем в коде, который вы представляете, поэтому позвольте мне попытаться объяснить (Вы делаете это более сложным, чемэто должно быть).
Нет.1 - это использование обратных тиков для подстановки команд, они устарели на языке ksh с ~ 1995 года!Используйте $ (... cmd) для современной замены cmd.Мы часто видим обратные пометки, перечисленные как дань переносимости, но только обратные пометки требуют использования только сценариев, написанных для систем, где оболочка Bourne - это оболочка only .(ну, я не знаю насчет черты или пепла, так что, может быть, тоже).
Нет 2. это $?устанавливается после выполнения любой функции, команды или конвейера и является кодом возврата этой последней команды.Это значение между 0-255.Когда у вас есть код вроде cmd ; rc=$? ; echo $?
;теперь вы повторяете статус назначения rc=$?
(который почти всегда будет равен 0), и именно поэтому вы увидите, что опытные сценаристы сохранят значение $?прежде чем делать что-либо еще с этим.
Напомним, что подстановка команд использует то, что когда-либо является выводом команды $( ... cmd ...)
или backtics, заключенной в оболочку, тогда как return
устанавливает значение $?
(до самого следующего выполнения команды сбрасывает это значение).
Надеюсь, это поможет.