Замена команды может быть вложена в подстановке переменных?

То, что Вы спрашиваете, является терминалом бесконечной ширины, часть которой отображается. Это не, как традиционно работают терминалы, ни как приложения ожидают, что они будут работать.

Например, если терминал имеет бесконечную ширину, как визуальные приложения предназначены для работы, когда они хотят отобразить что-то посреди экрана?

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

Как (в screen)

c=$COLUMNS # assuming your shell has that variable
screen -X width -w 1000
stty cols "$c"

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

Затем, чтобы прокрутить и скопировать данные вставки, единственная опция состоит в том, чтобы использовать screenрежим копии. (]) и переместите курсор (см. info -f screen -n Movement для того, чтобы переместиться в режиме копии).

tmux может иметь подобные возможности.

Это terminator эмулятор терминала (базирующийся Java), который не является terminator это идет с человечностью, также делает просто что с бесконечной терминальной шириной:

  • строки никогда не переносятся
  • визуальные приложения сказаны, что экран width - то, что помещается в окно, не бесконечность.
  • это также работало бы лучше, чем screen основанное решение выше в той его terminfo записи утверждает, что не делает, строка переносится так, приложения знают об этом, и БАКАЛАВР НАУК в начале строки не перемещается в конец предыдущей строки.

10
11.03.2015, 05:04
3 ответа

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

С ZSH , вы можете сделать вложенный замену :

$ echo ${$(echo 123)/123/456}   
456
6
27.01.2020, 20:02

Если вы не хотите создавать переменную AA, то есть и другие способы выполнения строковых замещений:

$ echo $(xclip -o -selection clipboard | sed 's/copi/knott/')
Here's a string I just knotted.
1
27.01.2020, 20:02

Да, вы можете сделать это - вид. Это действительно не красиво. Это больше похоже на встроен , чем вложенные. Проблема в том, что вы должны работать по значению параметра, который вы расширяете - если этот параметр не имеет значения, вы не будете делать много. Итак, вы можете назначить значение , а расширяется его, и вряд ли ярлык.

v=; echo "${v:=${0##*["$0${v:=$(xsel -bo)}"]}${v/copi/knott}}"

Я использую $ 0 расширение параметра в цепочке в Скрыть Назначение. Он присваивает значение VAR в расширении вложенного назначения. Внешний приоритет имеет приоритет - но потому что она просто расширится к тому, что все, что все трудно сказать. Однако, если мы закроем внутреннее расширение, затем измените его, вы можете получить то, что вы хотите. После копирования вашей строки в буфер обмена (у меня нет xClip - просто xsel ) Это печатает:

Here's a string I just knotted.

Это немного понятно, что происходит, если Выходите $ 0 out 0 , хотя:

v=; echo "${v:=${v:=$(xsel -bo)}${v/copi/knott}}"

, что печатается:

Here's a string I just copied.  Here's a string I just knotted.

... потому что внутреннее задание происходит до модификации, но, как отмечено, внешнее задание имеет приоритет - и он расширяется как к обоим Расширение внутреннего назначения и к модифицированному внутреннему расширению.

Конечно, никто из этого работает вообще, если целевой параметр уже назначен - так что вы можете сделать только это, если вы опустошите переменную в первую очередь ... что, честно говоря, вероятно, Самое удобное время, чтобы назначить его в конце концов.

2
27.01.2020, 20:02

Теги

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