Я новичок в stackoverflow и bash-сценариях, поэтому легко на меня! Я боролся с Баш скрипт я писал: когда я пытаюсь вызвать функцию «главного» от моего сценария следующим образом:Bash: Возвращаемое значение при вызове функции
variable=$("main -t $path/$i")
Я получаю ошибку «главный -t ./folder: Данный файл или каталог отсутствует"; есть идеи?
Заранее благодарен!
EDIT: Спасибо Jkbkot, я теперь называть это так:
variable=$(main -t "$path/$i")
оригинальной ошибка сортируются но что-то еще до: «переменного», казалось бы, не будучи присвоено значение вторит в функция, хотя вызов функции вручную печатает правильное значение. Почему это может произойти?
EDIT: Кажется, я правильно звоню и эхо, но при вызове «main», похоже, он ведет себя по-другому, когда рекурсивно вызывается на начальный вызов. Например, она прекрасно работает до:
variable=$(main -t "$path/$i") #A line within 'main'
Затем начинается снова, как и ожидалось, но на этот раз он останавливается, как только попадается «перерыв», по-видимому, вспыхивают вызова всей функции, а что именно «случай», в котором он сейчас находится. Есть ли какая-то причуда, чтобы «сломать» в bash, о котором я не знаю?
ПРИМЕЧАНИЕ: К сожалению, сценарий является заданием из моего университета, и многие его ученики и учителя используют этот сайт, поэтому публичное размещение моего решения, скорее всего, будет иметь негативные последствия.
Это поможет увидеть ваш фактический код, особенно. функция main. Например, следующие работы: '#!/Bin/bash main() {echo" $ 1-bar "} variable = $ (main foo) echo $ variable' Вывод' foo-bar', как и ожидалось. Может быть, ваш основной выход fucntion для stderr вместо stdout? –
Как я уже говорил выше, я не могу опубликовать полный код. Как я узнаю, к чему я обращаюсь? Я просто использую «эхо». – Jimmythebassist
Попробуйте запустить фрагмент из моего предыдущего комментария и убедитесь сами, что он работает так, как ожидалось. Вы можете изменить последнее эхо как 'echo VARIABLE: $ variable', чтобы избежать путаницы, с которой вы видите эхо. Wrt stderr, вы можете попробовать перенаправить stderr в stdout: 'variable = $ (main -t" $ path/$ i "2> & 1)' Если он работает, то ваша функция выводит на stderr. Кроме того, вы можете включить «отладку», поставив 'set -x' в начале вашего скрипта (по строке после хеш-бэнга). –