Как я могу записать команду `eval`, содержащую новую строку, в одну строку?

egrep +awk:

 egrep -Hrn 'StockID|SellPrice'./backup | awk -F ':' '$2==1{print $1}'
0
10.05.2020, 06:07
2 ответа

Так как вы используетеbash:

eval $'alias df5=df\ndf5 -h'

$'...'является "строкой C", и bashрасширит \nвнутри нее до буквального символа новой строки, прежде чем передать его в eval.

Необходимо соблюдать осторожность, так как другие последовательности обратной косой черты также могут быть расширены. См. вторую половину раздела QUOTINGв руководстве bash.

4
28.04.2021, 23:15

Есть несколько решений, но все они должны основываться на идее написания новой строки другими символами. Первое возможное решение, переносимое (очень старое )— получить новую строку внутри переменной:

nl='
'
eval 'alias df5=df'"$nl"'df5 -h'

Назначение явной новой строки переменной может выглядеть странно, в этом случае мы можем использовать:

  • Ansi -C цитирует (ksh,bash,zsh):

    nl=$'\n'
    
  • printf (большинство оболочек):

    eval "$(printf "nl='\n'")"
    

Но тогда эти две идеи могут быть использованы непосредственно для определения псевдонима:

eval $'alias df5=df\ndf5 -h'
eval "$(printf "alias 'df5=df\ndf5 -h'")"

Но, конечно, вы можете забыть о новой строке и определить псевдоним как:

alias df5=df && df -h

Но я не уверен, что это подходит для вашего варианта использования.:-)

1
28.04.2021, 23:15

Теги

Похожие вопросы