2

我必须使用 mingw32 在生成文件中将具有正斜杠的文件名转换为具有反斜杠的文件名。我使用以下 sed 命令将结果存储在变量中:

ORIGINAL=./a/b/main1.c ./a/b/main2.c ./a/b/main3.c

sed 命令:

RESULT=$(shell echo $(ORIGINAL) | sed 's/\//\\/g')

结果输出是:

.\a\b\main1.c .abmain2.c .abmain3.c

如果我直接在 bash 上运行它,它工作正常。谁能告诉我怎么了?

谢谢!

4

3 回答 3

8

我正在尝试在 makefile 中复制您的测试,但我没有您的环境。但是如果我正在搜索相同的字符,我不会使用“/”作为命令分隔符。使用其他字符,例如 ':'

sed 's:/:\\:g'
于 2013-05-30T19:53:45.050 回答
6
RESULT=$(sed 's/\//\\/g' <<< "$ORIGINAL")


$ ORIGINAL='./a/b/main1.c ./a/b/main2.c ./a/b/main3.c'
$ echo "$ORIGINAL"
./a/b/main1.c ./a/b/main2.c ./a/b/main3.c
$ RESULT=$(sed 's/\//\\/g' <<< "$ORIGINAL")
$ echo $RESULT
.\a\b\main1.c .\a\b\main2.c .\a\b\main3.c
于 2013-05-30T18:32:31.053 回答
3

make 调用的 shell 很可能不是 bash。但是,我发现您看到的任何 shell 的行为都非常奇怪(它在第一个单词中替换,但不是其余的?!?!)

您是否考虑过使用 GNUmake$(subst ...)功能,而不是外壳?

于 2013-05-30T18:32:20.007 回答