【问题标题】:echo - Syntax error: Bad substitutionecho - 语法错误:替换错误
【发布时间】:2013-12-02 17:22:04
【问题描述】:

一个有问题的脚本:

  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

请帮忙,谢谢 我将不胜感激:)

【问题讨论】:

  • 对我来说,由于变量名 ${$variable} 中的拼写错误,我收到了语法错误。它只需要一个$ 即可成为有效的语法。

标签: linux bash


【解决方案1】:

下面一行:

str=$(echo "${str// /-}")

导致Syntax error: Bad substitution,因为您没有使用bash 执行您的脚本。您正在使用导致错误的shdash 执行脚本。


编辑:为了修复您的脚本,使其能够与shdash 一起工作,除了bash,您可以替换以下行:

# get desired string
str=$(printf "%${leng}s" "-")

# replace empty spaces
str=$(echo "${str// /-}")

str=$(printf '=%.0s' $(seq $leng) | tr '=' '-')

【讨论】:

  • 我现在将使用 bash。谢谢
  • 因为你的解决方案给了我================== obd: test ================== 而不是-------------- obd: test --------------
  • @andrej 请参阅上面的编辑。现在应该是-------------- obd: test --------------
【解决方案2】:

使用纯 BASH 功能消除所有不必要的 expr 调用:

#!/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"

【讨论】:

  • 使用 sh 我得到 name.sh: 7: arith: syntax error: "22 - leng"
  • 你正在使用 bash shebang 那么你应该使用 bash 来运行你的脚本而不是 sh
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-17
  • 1970-01-01
  • 2021-08-30
  • 2015-09-25
  • 2015-06-01
  • 1970-01-01
  • 2021-11-06
相关资源
最近更新 更多