私は2つのレガシー部分を持ついくつかのソースを構築しています.1つはWindowsのようなもので、一連のbat/cmdファイルに基づいており、もう1つはUNIXのような構築システムに基づいており、autools、makefileなどを使用しています。したがって、大規模な書き換えを防ぐためにビルドシステムの cygwin bash は、bat ファイルから呼び出されます。また、ビルドスクリプト (LEGACY_SOURCE*) でソース変数を使用する必要があります。しかし、二重引用符で LEGACY_SOURCE_CYG を設定すると、bash はそれをパラメーターとして処理できません。
build.bat:
set LEGACY_SOURCE="c:\some\path"
set LEGACY_SOURCE_CYG='c:\some\path'
rem -----------------------------------------------
rem Building library, using Makefile
rem -----------------------------------------------
bash -c "export LEGACY_SOURCE_CYG=%LEGACY_SOURCE_CYG%; export PATH_WATCOM=%PATH_WATCOM%; export PATH_JWASM=%PATH_JWASM%; exec build/buildlib.sh"
buildlib.sh
#!/bin/sh
echo "Building USB library..."
SRC=$(echo -E "${LEGACY_SOURCE_CYG}" | sed -e 's/^\(.\{1\}\)/\L\1/' -e 's,:,,' -e 's,\\,/,g')
SRC="/cygdrive/${SRC}"
問題は、二重引用符と通常の引用符で同じパスの重複を排除する方法です。