ファイル内の有効なオプションを自分の設定に置き換える関数を書いています。1.txt は次のようになります。
PasswordAuthentication yes
PermitRootLogin yes
私の関数はファイルを処理し、次のように出力します。
#PasswordAuthentication yes
PasswordAuthentication no
#PermitRootLogin yes
PermitRootLogin no
sed パラメータは、以下のように関数 sed_chain() によって生成された文字列からのものです: 問題は、${pattern} と ${option} の間にスペースがある場合、エラーが発生しました: sed: -e expression #1, char 46: `s' コマンドが終了していません
それらの間にスペースがない場合、機能は機能しますが、それは私が望むものではありません。
#!/bin/bash
A="PasswordAuthentication no"
B="PermitRootLogin no"
F="/tmp/1.txt"
sed_chain() {
args=("$@")
file=${@:(-1)}
pattern_params=""
for i in $(seq 0 $(($#-2)))
do
pattern=$(echo ${args[$i]}|cut -d" " -f1)
option=$(echo ${args[$i]}|cut -d" " -f2)
echo $pattern
echo $option
pattern_params="-e s/^[^#]*${pattern}.*$/#&\n${pattern} ${option}/g $pattern_params" # failed
#pattern_params='-e s/^[^#]*'${pattern}'.*$/#&'"\n${pattern}${option}"'/g '${pattern_params} # passed
echo "*** $pattern_params ***"
done
sed $pattern_params $file
}
sed_chain "$A" "$B" "$F"