私はシェルスクリプトが初めてです。引数を含むファイルを 1 行ずつ読み取りたいのですが、引数にスペースが含まれている場合は、引用符で囲んで置き換えたいと考えています。
たとえば、ファイル (test.dat) に含まれている場合、
-DtestArgument1=/path/to a/text file
-DtestArgument2=/path/to a/text file
上記のファイルを解析した後、シェルスクリプトは次の文字列を準備する必要があります
-DtestArgument1="/path/to a/text file" -DtestArgument2="/path/to a/text file"
これが私のシェルスクリプトです。
while read ARGUMENT; do
ARGUMENT=`echo ${ARGUMENT} | tr "\n" " "`
if [[ "${ARGUMENT}" =~ " " ]]; then
ARGUMENT=`echo $ARGUMENT | sed 's/\^(-D.*\)=(.*)/\1=\"\2\"/g'`
NEW_ARGUMENT="${NEW_ARGUMENT} ${ARGUMENT}"
else
echo "doesn't contains spaces"
NEW_ARGUMENT="${NEW_ARGUMENT} ${ARGUMENT}"
fi
done < test.dat
しかし、次のエラーがスローされます。
sed: -e expression #1, char 28: Unmatched ) or \)
コードはすべてのシェルと互換性がある必要があります。私を助けてください。前もって感謝します。