Попытка извлечь первые 5 символов из строки в ошибке bash?
Я пытаюсь получить первые 5 символов из строки, но продолжаю получать ошибку Bad substitution
для строки манипуляции строкой, у меня есть следующие строки в моем teststring.sh
script:
TESTSTRINGONE="MOTEST"
NEWTESTSTRING=${TESTSTRINGONE:0:5}
echo ${NEWTESTSTRING}
Я много раз использовал синтаксис и не мог видеть, что я делаю неправильно
Спасибо
Ответы
Ответ 1
В зависимости от вашей оболочки вы можете использовать следующий синтаксис:
expr substr $string $position $length
Итак, для вашего примера:
TESTSTRINGONE="MOTEST"
echo `expr substr ${TESTSTRINGONE} 0 5`
В качестве альтернативы
echo 'MOTEST' | cut -c1-5
или
echo 'MOTEST' | awk '{print substr($0,0,5)}'
Ответ 2
echo 'mystring' |cut -c1-5
является альтернативным решением проблемы ur.
подробнее программа удаления unix
Ответ 3
Здесь работает:
$ TESTSTRINGONE="MOTEST"
$ NEWTESTSTRING=${TESTSTRINGONE:0:5}
$ echo ${NEWTESTSTRING}
MOTES
Какую оболочку вы используете?
Ответ 4
Это может сработать для вас:
printf "%.5s" $TESTSTRINGONE
Ответ 5
Подстроки с ${variablename:0:5}
- это функция bash, недоступная в базовых оболочках. Вы уверены, что используете это под bash? Проверьте строку shebang (в начале script) и убедитесь, что она #!/bin/bash
, а не #!/bin/sh
.
Ответ 6
Работает в большинстве оболочек
TESTSTRINGONE="MOTEST"
NEWTESTSTRING=${TESTSTRINGONE%"${TESTSTRINGONE#?????}"}
echo ${NEWTESTSTRING}
# MOTES
Ответ 7
Вы можете попробовать sed
, если хотите -
[jaypal:~/Temp] TESTSTRINGONE="MOTEST"
[jaypal:~/Temp] sed 's/\(.\{5\}\).*/\1/' <<< "$TESTSTRINGONE"
MOTES
Ответ 8
Это расширение параметра должно работать (какая версия bash у вас есть?)
Здесь другой подход:
read -n 5 NEWTESTSTRING <<< "$TESTSTRINGONE"
Ответ 9
echo $TESTSTRINGONE|awk '{print substr($0,0,5)}'
Ответ 10
Исходный синтаксис будет работать с BASH, но не с DASH. На дебианских системах вы
может показаться, что вы используете bash, но, возможно, вместо них. Если/bin/dash/существует, тогда
попробуйте временно переименовать тире на что-то вроде no.dash, а затем создайте мягкую
link, aka ln -s/bin/ bash/bin/dash и посмотреть, устраняет ли это проблему.
Ответ 11
Вы были так близко! Вот самое простое решение: NEWTESTSTRING=$(echo ${TESTSTRINGONE::5})
Итак, для вашего примера:
$ TESTSTRINGONE="MOTEST"
$ NEWTESTSTRING=$(echo ${TESTSTRINGONE::5})
$ echo $NEWTESTSTRING
MOTES