2013-05-26 2 views

ответ

2

Bash (или любой другой оболочки Unix для этого дела) не имеет ничего подобного.

В PowerShell то, что проходит через трубы, является объектом. В bash это вывод (в stdout) команды.

Замкнутая, что вы можете сделать, это использовать while:

thecmd | while read theline; do something_with "$theline"; done 

Обратите внимание, что IFS (Input Field Separator) используется, вы можете, следовательно, сделать:

thecmd | while read first therest; do ...; done 
+0

Да, я знаю, что в powershe ll передается и в bash stdout передается в трубе. Однако, хотя содержание stdout можно поместить в переменную по умолчанию в текущем сеансе, а затем передать эту переменную, чтобы другие могли ее использовать. Любые идеи, почему это не было реализовано? Это было бы похоже на использование tee, но вместо того, чтобы помещать вывод команды в файл, она помещала бы ее в переменную (скажем, $ __), доступ к которой можно получить только в текущем сеансе и которая может использоваться другими командами , Наверное, я мог написать сценарий, чтобы сделать именно это. –

+0

@JuanC. вы должны использовать 'A = $ (echo" hi ")' для этого. Теперь вы можете сделать 'echo $ A'. – kirelagin

+0

Если вы хотите передать вход без каких-либо искажений IFS, я предлагаю очистить это, прежде чем читать: 'thecmd | в то время как строка IFS = '' read; делать …; done'. Эта версия также пропускает пробелы в начале строки чтения без ее изменения. – Alfe

0

В Unix идеологии есть нет объектов или переменных. Основной продажей Unix является то, что все это простой текст, поэтому вы просто передаете текст из одной команды в другую.

Вы можете думать, что у вас есть только одна переменная, и вы всегда используете ее неявно. Ваш пример это немного странно, но самое близкое, что я могу думать о том, cat команда, которая принимает независимо от его входа (думаю о единственной неявной переменной) и выводит его, так

echo "Hi" | cat 

печатает

Hi 
+1

Кстати, если вы хотите мое мнение: это отстой. С объектами гораздо проще работать, и они дают гораздо большую гибкость. – kirelagin

0

Если вам действительно нужно получить это значение в качестве переменной (по любой причине), вы можете «фальшивый» его с помощью субкоманду в скобках в качестве имени переменной, например так:

echo "Hi" | echo "$(cat)" 
+0

Что это значит? – kirelagin

+0

Ой, подождите, работает в bash, но не в zsh. Это какая-то темная магия? – kirelagin

+0

Как бы вы подстроили это, когда вам нужно сделать что-то вроде этого эха «/ home/user» | echo $ {pipedVar ## * /}. ? Очевидно, что это не работает: echo "/ home/user" | echo $ {$ (cat) ## * /}. –

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