В powershell $_
- это имя текущей переменной, передаваемой с помощью труб. Что эквивалентно этому в Bash?имя переменной тока в трубе bash
Скажем, я хочу сделать это
echo "Hi" | echo "$_"
prints Hi
Благодарности
В powershell $_
- это имя текущей переменной, передаваемой с помощью труб. Что эквивалентно этому в Bash?имя переменной тока в трубе bash
Скажем, я хочу сделать это
echo "Hi" | echo "$_"
prints Hi
Благодарности
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
В Unix идеологии есть нет объектов или переменных. Основной продажей Unix является то, что все это простой текст, поэтому вы просто передаете текст из одной команды в другую.
Вы можете думать, что у вас есть только одна переменная, и вы всегда используете ее неявно. Ваш пример это немного странно, но самое близкое, что я могу думать о том, cat
команда, которая принимает независимо от его входа (думаю о единственной неявной переменной) и выводит его, так
echo "Hi" | cat
печатает
Hi
Кстати, если вы хотите мое мнение: это отстой. С объектами гораздо проще работать, и они дают гораздо большую гибкость. – kirelagin
Если вам действительно нужно получить это значение в качестве переменной (по любой причине), вы можете «фальшивый» его с помощью субкоманду в скобках в качестве имени переменной, например так:
echo "Hi" | echo "$(cat)"
Что это значит? – kirelagin
Ой, подождите, работает в bash, но не в zsh. Это какая-то темная магия? – kirelagin
Как бы вы подстроили это, когда вам нужно сделать что-то вроде этого эха «/ home/user» | echo $ {pipedVar ## * /}. ? Очевидно, что это не работает: echo "/ home/user" | echo $ {$ (cat) ## * /}. –
Да, я знаю, что в powershe ll передается и в bash stdout передается в трубе. Однако, хотя содержание stdout можно поместить в переменную по умолчанию в текущем сеансе, а затем передать эту переменную, чтобы другие могли ее использовать. Любые идеи, почему это не было реализовано? Это было бы похоже на использование tee, но вместо того, чтобы помещать вывод команды в файл, она помещала бы ее в переменную (скажем, $ __), доступ к которой можно получить только в текущем сеансе и которая может использоваться другими командами , Наверное, я мог написать сценарий, чтобы сделать именно это. –
@JuanC. вы должны использовать 'A = $ (echo" hi ")' для этого. Теперь вы можете сделать 'echo $ A'. – kirelagin
Если вы хотите передать вход без каких-либо искажений IFS, я предлагаю очистить это, прежде чем читать: 'thecmd | в то время как строка IFS = '' read; делать …; done'. Эта версия также пропускает пробелы в начале строки чтения без ее изменения. – Alfe