Bash扩展包含正确的sed模式的变量

Sva*_*zen 2 bash sed

我有一个这样的脚本:

#!/bin/bash

xx="-e \"s|a|b|g\""
sed -i $xx file
Run Code Online (Sandbox Code Playgroud)

但是sed打破了消息:

sed: -e expression #1, char 1: unknown command: `"'
Run Code Online (Sandbox Code Playgroud)

使用set -x我可以看到命令正在扩展到sed -i -e '"s|a|b|g"' file,所以我猜双引号是它无法正常工作的原因.

如何解决这个问题?

Tom*_*ech 5

我不确定你为什么要做你正在做的事情,但我认为这可能会有所帮助:

$ cat file
a a
$ xx=( -e 's|a|b|g' -e 's|b|c|g' )
$ sed "${xx[@]}" file
c c
Run Code Online (Sandbox Code Playgroud)

使用数组将每个参数存储到sed.使用"${xx[@]}"安全地展开数组,传递每个元件作为单个参数.

您可以像这样构建数组:

$ xx=()
$ xx+=( -e 's|a| b c |g' )
$ xx+=( -e 's|c| d |g' )
$ sed "${xx[@]}" file
 b  d    b  d
Run Code Online (Sandbox Code Playgroud)

  • 如果你更具体地了解_how_它不起作用你应该使用`xx + =('s | a | b | g')`(丢失双引号). (2认同)