Причиной этого является порядок, в котором вещи происходят в ударе. Расширение фигурной скобки происходит, прежде чем переменные расширены. Для выполнения цели необходимо использовать C-стиль для цикла:
upperlim=10
for ((i=0; i<=upperlim; i++)); do
echo "$i"
done
Хорошая современная поддержка терминалов заключенная в скобки вставка: при использовании команды вставки терминала она отправляет специальные escape-последовательности вокруг содержания буфера обмена. Если Ваши поддержки оболочки заключили в скобки вставку, она вставит содержание буфера обмена включая любые управляющие символы как есть, и в особенности запаздывающая новая строка не инициирует выполнение команды.
Zsh ≥5.1 поддержек заключенная в скобки вставка и имеет его на по умолчанию. Более старые версии могут преподаваться. Bash ≥4.4 поддержки заключенная в скобки вставка, если Вы добавляете set enable-bracketed-paste on
кому: ~/.inputrc
.
Если Ваш терминал или оболочка не поддерживают заключенную в скобки вставку, Вы могли бы определить функцию оболочки, которая вставляет без запаздывающей новой строки.
В zsh следующая команда напоминает содержание буфера обмена, минус запаздывающие новые строки, и поднимает его для редактирования (даже если существует несколько строк):
print -z -- "`xsel -b`"
В ударе можно продвинуть содержание буфера обмена минус запаздывающие новые строки к стопке истории. После этого нажмите Up для перевода в рабочее состояние команды для редактирования.
history -s -- "`xsel -b`"
Да, используйте cat
для вставки в файле сделайте то, что Вы любите и затем выполняете его.
Для этого случая:
$ cat > tmp
[paste][Ctrl+D]
$ tr -d '\n' <tmp | xclip # this remove all "new line" characters
# and copy back to clipboard
Это заставляет \ev
вставить буфер обмена без новых строк в bash 4.0 и более поздние:
pasteline() {
local input=$(xsel -b)
input=${input//$'\n'}
READLINE_LINE=${READLINE_LINE:0:$READLINE_POINT}$input${READLINE_LINE:$READLINE_POINT}
READLINE_POINT=$((READLINE_POINT+${#input}))
}
bind -x '"\ev": pasteline'
Замените xsel -b
на pbpaste
и установите bash 4 в OS X.
Я понял, что мы можем сделать это в одну строку, вдохновленный ответом @RSFalcon7
с помощью xsel
, чтобы скопировать в основной выбор
cat | tr -d '\n' | xsel
[paste], 2 times[Ctrl-D]