Вы уверены, что запускаете скрипт с правильной версией bash? Ваша линия Шебанга в порядке? Как насчет вызова скрипта с помощьюbash myscript.sh?
Это сработало:
v="aksdjfkajsdkfjakdf"
length=${#v}
v2=${v:0: length - 6}
Использование отрицательной длины было добавлено в Bash 4.2:
${PARAMETER:OFFSET:LENGTH}: Negative LENGTH values are used as offset from the end of the string 4.2-alpha
И, похоже, у меня это работает с версиями Bash 4.2.53, 4.4.12 и 5.0.3. С любым из них я получаю:
$ s=123456; echo "${s::-2}"
1234
$ s=123456; echo "${s::-8}"
bash: -8: substring expression < 0
То есть это работает до тех пор, пока абсолютное значение отрицательной длины не превышает длину строки.
Я сделал следующим способом
v="ksdjfksjkjsdf"
echo $v| awk -F "" '{gsub("","\n",$0);print $0}'| sed '/^$/d'| sed -n '1,7p'| perl -pne g"/\n//g"
выход
echo $v| awk -F "" '{gsub("","\n",$0);print $0}'| sed '/^$/d'| sed -n '1,7p'| perl -pne g"/\n//g"
ksdjfks