cygwin bash 正斜杠转换为反斜杠

cygwin bash forward slash converted to backslash

无法想象这个我们的或创建一个可以重现这个的样本。

我正在尝试使用外部 sh 文件调用 hadoop sh 文件

myfile.sh

# workingdir = /data1/some/path/lib
WORKINGDIR=`cygpath -p -w -m "$WORKINGDIR"`
# so the above in windows land is C:/some/path/lib
# HADOOPCMD essentially is a call to hadoop.sh
$HADOOPCMD jar $WORKINGDIR/myjar.jar

hadoop.sh

echo "$@" // still C:/some/path/lib
exec "$JAVA" $JAVA_HEAP_MAX $HADOOP_OPTS $CLASS "$@"

然而,当在 cygwin 中扩展“$@”时,结果路径变为 C:\some\path\lib 然后 hadoop.sh 抱怨找不到 jar ... 不是有效的 JAR : C :\some\path\lib

但是,如果我要对 myfile.sh 中的路径进行硬编码;有效

$HADOOPCMD jar C:/some/path/lib/myjar.jar

问题

  1. 为什么 exec 命令的“$@”将 WORKINGDIR 变量中的 / 更改为 \?
  2. 为什么硬编码路径有效?
  3. 如何让它与变量替换一起工作?

引用变量有效 "$WORKINGDIR"/myjar.jar