echo-синтаксическая ошибка: плохая подстановка
скрипт с проблемой:
1 #!/bin/bash
2
3 skl="test"
4 # get length
5 leng=$(expr length $skl)
6 # get desired length
7 leng=$(expr 22 - $leng)
8
9 # get desired string
10 str=$(printf "%${leng}s" "-")
11
12 # replace empty spaces
13 str=$(echo "${str// /-}")
14
15 # output
16 echo "$str obd: $skl $str"
17
но он выводит:
name.sh: 13: Syntax error: Bad substitution
пожалуйста, помогите, спасибо Буду очень благодарен:)
2 ответов
следующую строку:
str=$(echo "${str// /-}")
приводит в Syntax error: Bad substitution
потому что ты не выполнение скрипта через bash
. Вы либо выполняете свой скрипт, используя sh
или dash
что вызывает ошибку.
EDIT: для того, чтобы исправить ваш скрипт, чтобы он мог работать с sh
и dash
кроме bash
, вы можете заменить следующее строки:
# get desired string
str=$(printf "%${leng}s" "-")
# replace empty spaces
str=$(echo "${str// /-}")
С
str=$(printf '=%.0s' $(seq $leng) | tr '=' '-')
выньте все ненужные вызовы expr, используя функции pure BASH:
#!/bin/bash
skl="test"
# get length
leng=${#skl}
# get desired length
leng=$((22 - leng))
# get desired string
str=$(printf "%${leng}s" "-")
# replace empty spaces
str=$(echo "${str// /-}")
# output
echo "$str obd: $skl $str"