2016-07-26 2 views
0

Мой оболочки a.sh сценарий как это:Почему это работает различен для источника и ш вызова в оболочке

#!/bin/sh 
# $ret maybe from database or pipe,whatever it likes: 
ret="cnt 
1" 

echo -e $ret 

и вызов по-разному дают разные результаты:

$ sh a.sh 
cnt 1 
$ source a.sh 
cnt 
1 
$ 

Как я могу получить тот же выход под sh и source?

+0

запуск сценария и поиск различных вещей. Кроме того, вам нужно процитировать 'echo'. – fedorqui

+0

спасибо @fedorqui. это означает 'echo -e '$ ret" ' Я знаю, что' sh' или 'source' - это разные способы вызова, подробности мы можем видеть. [В чем разница между запуском сценария оболочки как ./script.sh и sh script.sh ] (http://stackoverflow.com/questions/2468132/whats-the-difference-between-running-a-shell-script-as-script-sh-and-sh-script) – tonylee0329

+0

Какую оболочку вы используете? Кажется, это должно быть 'zsh'; только эта оболочка (из Bash, Dash, Korn и zsh try) создает двухстрочный вывод, когда сценарий, который вы показываете, является источником; другие производят одну строку вывода (и Bash запускается как 'sh' добавляет' -e' к выходу). –

ответ

0

Как получить такой же результат при sh и source?

Вы должны указать echo. - fedorqui

спасибо @fedorqui. это означает, что echo -e "$ret" - tonylee0329

Точно говоря, аргумент echo - это способ регулировки разницы между двумя оболочками echo.

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