繁体   English   中英

用 sed 修改 bash 变量

[英]Modify bash variable with sed

为什么以下 bash 脚本不起作用? 我想要 output 两行这样的:

XXXXXXX
YYYYYYY

如果我将 sed 行更改为使用文件名而不是变量,它会起作用,但我想使用变量。

#!/bin/bash
input=$(echo -e '=======\n-------\n')

for sym in = -; do
  if [ "$sym" == '-' ]; then
    replace=Y
  else
    replace=X
  fi

  printf "%s\n" "s/./$replace/g"
done | sed -f- <<<"$input"

主要问题是您给 sed 提供了两个源来读取标准输入:通过 pipe 提供的 for 循环,以及通过 here-string 提供的变量。 事实证明,这里的字符串优先,sed 抱怨命令后面有多余的字符( =是命令)。

您可以使用进程替换来代替此处的字符串:

for sym in = -; do
    if [ "$sym" == '-' ]; then
        replace=Y
    else
        replace=X
    fi

    printf "%s\n" "s/./$replace/g"
done | sed -f- <(printf '%s\n' '=======' '-------')

但是,您会注意到 output 不是您想要的,即

YYYYYYY
YYYYYYY

这是因为您最终得到的 sed 脚本如下所示:

s/./X/g
s/./Y/g

无论您先做什么,最后一个命令都会用Y替换所有内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM