Печать диапазонов вывода с эхом

Я нашел код для получения текущего статуса Caps Lock (так как клавиатура этого ноутбука не имеет никаких светодиодных индикаторов для этого).

#!/bin/bash v=`xset -q | grep Caps` echo ${v:7:17} 

Я понимаю, как работает первая часть; он запрашивает статус, а затем ищет строку «Caps» и сохраняет ее для переменной. Я не понимаю, вот эта строка:

 echo ${v:7:17} 

Эта строка просто печатает «Caps Lock: off / on», в зависимости от состояния Caps Lock. Я предполагаю, что числа и двоеточия предназначены для указания диапазона, поэтому посторонняя информация не печатается, но цифры, похоже, не соответствуют печатаемым символам каким-либо образом. Полная строка, которая будет распечатана, выглядит примерно так:

  00: Caps Lock: off 01: Num Lock: on 02: Scroll Lock: выкл. 

Я спрашиваю: что именно задает диапазон? Это говорит v:start:end , по существу? Я попытался найти информацию об использовании диапазонов с echo , но ничего не нашел. В man-страницах моей системы даже не упоминается об использовании для echo .

  • Как использовать grep и вырезать скрипт для получения URL-адресов веб-сайтов из файла HTML
  • Подстрока grep между кавычками
  • grep инвертированное соответствие по строке, удовлетворяющей шаблону
  • Добавить разделитель тысяч в число
  • Как я могу добавить и добавить к каждому члену массива?
  • Перепишите аргументы перед передачей их команде
  • Как печатать каждую строку файла столько раз, сколько в соответствии с номером в первом столбце
  • Подстановка расширений файлов на переменную
  • 2 Solutions collect form web for “Печать диапазонов вывода с эхом”

    См. Расширение подстроки . Формат: ${string:position:length} . Рассмотрим, например:

     $ x="123456789012345678901234567890" $ echo ${x:0:0} $ echo ${x:0:1} 1 $ echo ${x:0:2} $ echo ${x:0:3} 123 $ echo ${x:1:3} 234 

    Речь идет не об echo . Речь идет о оболочке. Например, если вы просматриваете man bash используя эту команду,

     man bash | grep -C5 { 

    вы увидите описание, подобное этому

     ${parameter:offset} ${parameter:offset:length} Substring Expansion. Expands to up to length characters of the value of parameter starting at the character specified by offset. If parameter is @, an indexed array subscripted by @ or *, or an associative array name, the results differ as described below. If length is omitted, expands to the substring of the value of parameter starting at the character spec‐ ified by offset and extending to the end of the value. length and offset are arithmetic expressions (see ARITHMETIC EVAL‐ UATION below). 

    echo только печатает подстроку, но printf будет делать то же самое.

    Полное описание в man bash :

     ${parameter:offset} ${parameter:offset:length} Substring Expansion. Expands to up to length characters of the value of parameter starting at the character specified by offset. If parameter is @, an indexed array subscripted by @ or *, or an asso‐ ciative array name, the results differ as described below. If length is omitted, expands to the substring of the value of parameter start‐ ing at the character specified by offset and extending to the end of the value. length and offset are arithmetic expressions (see ARITH‐ METIC EVALUATION below). If offset evaluates to a number less than zero, the value is used as an offset in characters from the end of the value of parameter. If length evaluates to a number less than zero, it is interpreted as an offset in characters from the end of the value of parameter rather than a number of characters, and the expansion is the characters between offset and that result. Note that a negative offset must be separated from the colon by at least one space to avoid being con‐ fused with the :- expansion. If parameter is @, the result is length positional parameters begin‐ ning at offset. A negative offset is taken relative to one greater than the greatest positional parameter, so an offset of -1 evaluates to the last positional parameter. It is an expansion error if length evaluates to a number less than zero. If parameter is an indexed array name subscripted by @ or *, the result is the length members of the array beginning with ${parame‐ ter[offset]}. A negative offset is taken relative to one greater than the maximum index of the specified array. It is an expansion error if length evaluates to a number less than zero. Substring expansion applied to an associative array produces unde‐ fined results. Substring indexing is zero-based unless the positional parameters are used, in which case the indexing starts at 1 by default. If offset is 0, and the positional parameters are used, $0 is prefixed to the list. 
    Interesting Posts

    Разрешить удаление sudo для удаленного пользователя для цели восстановления. Последствия для безопасности?

    Мышь дрейфует при перетаскивании в Linux Mint KDE на VMWare Fusion

    Что называется этим файлом – в моем домашнем каталоге?

    В каких дистрибутивах GNU / Linux есть хорошее программное обеспечение для увеличения экрана, которое можно свободно или предустановить?

    Как динамически использовать перенаправление вывода?

    Как просто восстановить единственный файл только на удаленном диске?

    Debian просыпается с приостановления пароля

    Проблема маршрута с OpenVPN

    Запретить File IO для процесса, за исключением FIFO

    Trouble update-rc.d remove'ing dnsmasq на Debian Stretch

    Сценарий с использованием пользовательского ввода для расчета старой даты

    Медленная скорость передачи scp по wan

    Использование определенной версии программы в настройке

    Поиск библиотек, с которыми была связана библиотека,

    Приложения XForwarding из OSX

    Linux и Unix - лучшая ОС в мире.