【问题标题】:Variable replacement with ${string//variable1/variable2} issue in unixunix 中 ${string//variable1/variable2} 的变量替换问题
【发布时间】:2014-05-30 04:39:45
【问题描述】:

您好,我正在尝试用另一个字符串替换一个字符串。

这是我的示例

$SITE 已被声明

PARAM="$SITE,90,1000"
PARAM=${PARAM//'$SITE'/$SITE}

但我收到此错误

PARAMS="${PARAMS//"\$SITE"/$SITE}": 0403-011 The specified substitution is not valid for this command.

是什么导致这个“\”出现在 unix 执行中?

当我直接从 Shell 脚本执行时,它可以工作。

但是这些参数是从我构建 PARAM 变量的文本文件中获取的。 最后我做了一个 sqlplus 语句,我执行过程(参数,...);

在这种情况下有什么问题?

【问题讨论】:

  • $SITE 的值是多少?
  • set -vx 查看 shell 如何执行每一行。您在 PARAM=... 中使用的 '$SITE' 相当于错误消息中显示的 "\$SITE"。由于 SITE 已声明,请尝试 PARAM=${PARAM//"$SITE"/$SITE}。祝你好运。
  • 好的,PARAM 的预期输出是什么?
  • PARAMS 是 $SITE,90,1000 但由于 sqlplus 将其读取为 $SITE,我想使用 replace 方法将文字站点替换为已传递的值 $SITE。所以我希望参数最终像12,90,1000

标签: string shell unix ksh


【解决方案1】:

这个怎么样?

PARAM=$SITE${PARAM#\$SITE}

$PARAM 的开头删除文字字符串$SITE,然后添加$SITE 的实际值。

> SITE=12
> PARAM='$SITE,90,1000'
> echo $PARAM 
$SITE,90,1000
> echo "$SITE${PARAM#\$SITE}"
12,90,1000

【讨论】:

    【解决方案2】:

    你有什么版本的 ksh?

    $ SITE=42
    $ PARAM='$SITE,90,1000'
    $ echo ${PARAM//\$SITE/$SITE}
    42,90,1000
    $ echo ${PARAM//'$SITE'/$SITE}
    42,90,1000
    $ ksh --version
      version         sh (AT&T Research) 93u 2011-02-08
    

    【讨论】:

      猜你喜欢
      • 2014-10-19
      • 2019-03-05
      • 1970-01-01
      • 2019-06-21
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多