bashスクリプトの変数にgrepコマンドの出力を割り当てようとしていますが、変数は空です。次のコマンドを実行するとき:
el_value=$(grep '<$2>.*<$2>' $1 | sed -e 's/^.*<$2/<$2/' | cut -f2 -d'>'| cut -f1 -d':')
echo "DEBUG: The value of el_value is '$el_value'"
出力は次のとおりです
DEBUG: The value of el_value is ''
スクリプトの外部でgrepコマンドを実行し、変数を実際の値に置き換えると、予想される出力が得られます。
以下はスクリプトの一部です。このスクリプトを使用して上記の値を追加します。
#!/bin/bash
if [ $# -ne 3 ]; then
echo 1>&2 'This script replaces xml element’s value with the one provided as a command parameter \n\n\tUsage: $0 <xml filename> <element name> <new value>'
exit 127
fi
el_value=`grep "<$2>.*<$2>" $1 | sed -e "s/^.*<$2/<$2/" | cut -f2 -d'>'| cut -f1 -d':'`
echo "DEBUG: The value of el_value is '$el_value'"
ベストアンサー1
努力する:
el_value=$(sed -n "s/.*<$2>\([^:<]*\).*/\1/p" < "$1")
コードの問題は次のとおりです。
- 一重引用符は
$2
拡張されていないことを意味します。 /
検索コマンドgrep
に閉じるタグがありません。