首页 > 解决方案 > 根据变量运行 sed 命令

问题描述

我正在尝试sed根据用户输入运行变量命令:

#!/bin/bash

ACTION=$1

if [ "wp" == "$ACTION"  ]
then
   MODIFIEDCONF='sed -i -e "/#Begin wp redirect/,/#End wp redirect/d" /root/test-conf'
else
   MODIFIEDCONF='sed -i -e "/#Begin ghost redirect/,/#End ghost redirect/d" /root/test-conf'
fi

RESULT=$($MODIFIEDCONF)

但我收到错误:

sed: -e expression #1, char 1: unknown command: `"'

如何修复错误?或者有更好的方法吗?

标签: bashif-statementsedswitch-statement

解决方案


把事情简单化。在一个变量中设置你的 sed 命令模式,然后执行它。

case "$ACTION" in
wp) cmd="/#Begin wp redirect/,/#End wp redirect/d"       ;;
 *) cmd="/#Begin ghost redirect/,/#End ghost redirect/d" ;;
esac

sed -i "$cmd" /root/test-conf

或者为了提高可读性,只需设置密钥并嵌入。

case "$ACTION" in
wp) key=wp    ;;
 *) key=ghost ;;
esac

sed -i "/#Begin $key redirect/,/#End $key redirect/d" /root/test-conf

抽象是力量,但不必要的抽象是混淆。


推荐阅读