Как я могу извлечь последние X символов из строковой переменной?

Я читаю последнюю строку файла в переменную. Затем я хочу получить последние X символов строковой переменной:

#!/bin/bash
someline="this is the last line content"
echo ${someline}
somepart=${someline: -5}
echo ${somepart}

Выполнить с: sh lastchars.sh

Результат:

this is the last line content
line 4: Bad substitution

Что может быть не так? здесь?

3
задан 21 November 2017 в 07:52

2 ответа

Похоже, вы вообще не используете bash. Я могу воспроизвести только ту ошибку, которую вы показываете, если я использую dash вместо bash:

  1. bash:

    $ line="someline content"
    $ echo ${line}
    someline content
    $ lastchars=${line: -5}
    $ echo ${lastchars}
    ntent
    
  2. dash:

    $ line="someline content"
    echo ${line}
    lastchars=${line: -5}
    echo ${lastchars}
    $ someline content
    $ dash: 3: Bad substitution
    

Ваша линия Шебанга указывает на bash, но вы запускаете скрипт с sh, поэтому шебанг игнорируется /bin/sh в системах Ubuntu на самом деле - dash, минимальная оболочка, которая не поддерживает синтаксис, который вы пытаетесь использовать.

При использовании строки shebang нет причин явно вызывать оболочку для скрипта, просто сделайте ее исполняемой (chmod a+x /path/to/script.sh) и запускайте ее без указания интерпретатора:

/path/to/script.sh

В качестве альтернативы просто используйте правильный:

bash /path/to/script.sh
16
ответ дан 21 November 2017 в 07:52

Очевидно, что использование встроенных функций определенной оболочки неплохо, но вы также можете выполнить задачу, используя стандартные команды UNIX, поэтому она будет работать в любой оболочке:

String="This is some text"
StrLen=`echo ${String} | wc -c`
From=`expr $StrLen - 5`
echo $String | cut -c${From}-${StrLen}
0
ответ дан 21 November 2017 в 07:52

Другие вопросы по тегам:

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