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

Я нашел код для получения текущего статуса 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 .

  • Как я могу использовать sed, чтобы отрезать строку от строки?
  • добавьте подкаталоги в $ PATH в bash, используя find
  • Как найти позицию персонажа с помощью grep?
  • Проблема с sed в массиве, содержащем строки, содержащие пробелы
  • Изменение вхождения строки в файл при соблюдении новых строк строки DOS
  • Подстановка расширений файлов на переменную
  • У меня есть многострочная строка, которую мне нужно перебрать, но я не использую bash. Совет?
  • Извлечение подстроки из переменной среды
  • 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

    Как бороться с большим количеством ошибок страницы?

    Как я могу перенаправить весь трафик, кроме локального через внешний прокси с iptables в dd-wrt?

    Массовая передача больших файлов из одного окна Linux в другой Linux-блок?

    Как установить свойства протокола Интернета с помощью терминала?

    Debian считает, что моя файловая система кодируется как ISO-8859-1

    Проблема с заменой команды bash & variable

    В emacs – любые ключевые последовательности, доступные для пользовательских макросвязей во всех режимах

    Как успешно обновить-java-альтернативы для Oracle в Debian?

    Как настроить ярлык, который вызывает экран поиска в Fedora?

    Больше ничего не видно на консоли после «Начало ядра …»

    Есть ли способ отслеживать шаблоны дисков i / o? (т.е. случайный или последовательный i / o?)

    Отправлять трафик через другой узел

    Список сведений о файлах / каталогах с пробелами

    Утечка памяти xorg

    Как узнать больше о файлах сокетов в / proc / fd?

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