试图从bash错误中的字符串中检索前5个字符?

Mo.*_*Mo. 64 bash shell

我正在尝试从字符串中检索前5个字符,但不断收到Bad substitution字符串操作行的错误,我的teststring.sh脚本中有以下行:

TESTSTRINGONE="MOTEST"

NEWTESTSTRING=${TESTSTRINGONE:0:5}
echo ${NEWTESTSTRING}
Run Code Online (Sandbox Code Playgroud)

我已多次查看语法,无法看到我做错了什么

谢谢

Ale*_*x L 62

根据您的shell,您可以使用以下语法:

expr substr $string $position $length
Run Code Online (Sandbox Code Playgroud)

所以对于你的例子:

TESTSTRINGONE="MOTEST"
echo `expr substr ${TESTSTRINGONE} 0 5`
Run Code Online (Sandbox Code Playgroud)

或者,

echo 'MOTEST' | cut -c1-5
Run Code Online (Sandbox Code Playgroud)

要么

echo 'MOTEST' | awk '{print substr($0,0,5)}'
Run Code Online (Sandbox Code Playgroud)


Bal*_*man 60

echo 'mystring' |cut -c1-5 是你问题的另一种解决方案.

更多关于unix削减计划


小智 45

在这里工作:

$ TESTSTRINGONE="MOTEST"
$ NEWTESTSTRING=${TESTSTRINGONE:0:5}
$ echo ${NEWTESTSTRING}
MOTES
Run Code Online (Sandbox Code Playgroud)

你用的是什么外壳?

  • 也许你的脚本不是由bash执行的,而是由一些功能较弱的shell执行的. (4认同)
  • 你试过在你的第一行添加`#!/ bin/bash`或`#!/ bin/sh`吗? (4认同)

pot*_*ong 7

这可能对您有用:

 printf "%.5s" $TESTSTRINGONE
Run Code Online (Sandbox Code Playgroud)


Gor*_*son 7

子字符串${variablename:0:5}是一个bash功能,在基本shell中不可用.你确定你在bash下运行吗?检查shebang行(在脚本的开头),并确保它#!/bin/bash不是#!/bin/sh.


Lau*_*uri 5

适用于大多数炮弹

TESTSTRINGONE="MOTEST"
NEWTESTSTRING=${TESTSTRINGONE%"${TESTSTRINGONE#?????}"}
echo ${NEWTESTSTRING}
# MOTES
Run Code Online (Sandbox Code Playgroud)