我必须使用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上运行它,它可以正常工作。谁能告诉我什么是错的?
谢谢!
答案 0 :(得分: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
答案 1 :(得分:6)
我正在尝试在makefile中复制你的测试,但我没有你的环境。 但是如果我要搜索相同的字符,我不会使用'/'作为命令分隔符。使用其他字符,例如':'
sed 's:/:\\:g'
答案 2 :(得分:3)
最有可能调用的shell不是bash。但是,我发现你看到的任何shell的行为都很奇怪(它取代了第一个单词而不是其余的单词?!?!)
您是否考虑过使用GNU make
的{{1}}函数而不是shell?