bash スクリプト内で、xmlstarlet ツールの xml ed コマンドに引数を渡したいと考えています。スクリプトは次のとおりです。
#!/bin/bash
# this variable holds the arguments I want to pass
ED=' -u "/a/@id" -v NEW_ID -u "/a/b" -v NEW_VALUE'
# this variable holds the input xml
IN='
<a id="OLD_ID">
<b>OLD_VALUE</b>
</a>
'
# here I pass the arguments manually
echo $IN | xml ed -u "/a/@id" -v NEW_ID -u "/a/b" -v NEW_VALUE input.xml
# here I pass them using the variable from above
echo $IN | xml ed $ED
最初の呼び出しが機能するのはなぜですか、つまり、望ましい結果が得られるのはなぜですか。
# echo $IN | xml ed -u "/a/@id" -v NEW_ID -u "/a/b" -v NEW_VALUE input.xml
<?xml version="1.0"?>
<a id="NEW_ID">
<b>NEW_VALUE</b>
</a>
2番目の呼び出しは機能しませんが、つまり、次のようになります。
# echo $IN | xml ed $ED
<?xml version="1.0"?>
<a id="OLD_ID">
<b>OLD_VALUE</b>
</a>