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

Нажмите на апплет Bluetooth> Свойства> присоединиться к локальной сети

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

6 ответов

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

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

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

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

/path/to/script.sh

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

bash /path/to/script.sh
16
ответ дан 22 May 2018 в 16:04
  • 1
    У меня есть #!/bin/bash и все еще получаю ошибку. Интересно, работает ли скрипт с bash lastchars.sh! Ты знаешь почему? – membersound 20 November 2017 в 15:37
  • 2
    @membersound yes, потому что вы используете его как sh lastchars.sh. [F2] игнорируется, если вы запускаете его с определенной оболочкой. Поэтому либо запустите его напрямую (lastchars.sh), либо запустите его с помощью bash (bash lastchars.sh). – terdon♦ 20 November 2017 в 15:38
  • 3
    Хорошо, так что это, вероятно, решение. – membersound 20 November 2017 в 15:43
  • 4
    @membersound Подробнее о том, почему строка #!/bin/bash игнорируется при запуске sh lastchars.sh, см. . Чтение #! / bin / sh интерпретатором? (которое относится к любой строке «hashbang» , в том числе #!/bin/bash, а не только #!/bin/sh). – Eliah Kagan 20 November 2017 в 17:53

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

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

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

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

/path/to/script.sh

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

bash /path/to/script.sh
16
ответ дан 18 July 2018 в 02:57

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

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

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

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

/path/to/script.sh

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

bash /path/to/script.sh
16
ответ дан 24 July 2018 в 17:42

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

String="This is some text"
StrLen=`echo ${String} | wc -c`
From=`expr $StrLen - 5`
echo $String | cut -c${From}-${StrLen}
0
ответ дан 22 May 2018 в 16:04

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

String="This is some text" StrLen=`echo ${String} | wc -c` From=`expr $StrLen - 5` echo $String | cut -c${From}-${StrLen}
0
ответ дан 18 July 2018 в 02:57

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

String="This is some text" StrLen=`echo ${String} | wc -c` From=`expr $StrLen - 5` echo $String | cut -c${From}-${StrLen}
0
ответ дан 24 July 2018 в 17:42

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

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