2013-12-20 2 views
2

Я новичок в 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, о котором я не знаю?

ПРИМЕЧАНИЕ: К сожалению, сценарий является заданием из моего университета, и многие его ученики и учителя используют этот сайт, поэтому публичное размещение моего решения, скорее всего, будет иметь негативные последствия.

+0

Это поможет увидеть ваш фактический код, особенно. функция main. Например, следующие работы: '#!/Bin/bash main() {echo" $ 1-bar "} variable = $ (main foo) echo $ variable' Вывод' foo-bar', как и ожидалось. Может быть, ваш основной выход fucntion для stderr вместо stdout? –

+0

Как я уже говорил выше, я не могу опубликовать полный код. Как я узнаю, к чему я обращаюсь? Я просто использую «эхо». – Jimmythebassist

+0

Попробуйте запустить фрагмент из моего предыдущего комментария и убедитесь сами, что он работает так, как ожидалось. Вы можете изменить последнее эхо как 'echo VARIABLE: $ variable', чтобы избежать путаницы, с которой вы видите эхо. Wrt stderr, вы можете попробовать перенаправить stderr в stdout: 'variable = $ (main -t" $ path/$ i "2> & 1)' Если он работает, то ваша функция выводит на stderr. Кроме того, вы можете включить «отладку», поставив 'set -x' в начале вашего скрипта (по строке после хеш-бэнга). –

ответ

5

Вы должны назвать это без кавычек:

variable=$(main -t $path/$i) 

и, как @janos говорит, что вам может понадобиться кавычки вокруг переменных в случае, если они могут содержать пробелы и т.д .:

variable=$(main -t "$path/$i") 
+2

, он может очень нуждаться в котировках внутри: 'variable = $ (main -t" $ path/$ i ")' – janos

+0

true, ему могут понадобиться только кавычки вокруг переменных –

+0

Спасибо вам обоим, вы столкнулись с другой проблемой, подробно описанной выше. – Jimmythebassist

Смежные вопросы