Shell-在命令行参数中读取反斜杠

Deq*_*ing 0 bash shell command-line

我正在考虑为cygwin编写一个脚本,将cd插入从Windows资源管理器复制的Windows目录中。

例如

cdw D:\working\test
Run Code Online (Sandbox Code Playgroud)

等于

cd /cygdrive/d/working/test
Run Code Online (Sandbox Code Playgroud)

但是对于shell脚本来说,除非使用单引号'D:\working\test'或双反斜杠,否则参数中的所有反斜杠都将被忽略D:\\working\\test

但是对于我来说,这将带来很大的不便,因为我不能简单地在命令行中粘贴目录名称来执行脚本。

有什么办法可以cdw D:\working\test工作吗?

Igo*_*bin 5

好吧,你可以做到,但是你想要一些奇怪的东西:)

cdw()
{
    set $(history | tail -1 )
    shift 2
    path="$*"
    cd $(cygpath "$path")
}
Run Code Online (Sandbox Code Playgroud)

用法示例:

$ cdw D:\working\test
$ pwd
/cygdrive/d/working/test
Run Code Online (Sandbox Code Playgroud)

这里的重点是的用法history。您不直接使用参数,而是以键入的形式从历史记录中获取参数。

$ rawarg() { set $(history | tail -1 ); shift 2; echo "$@"; }
$ rawarg C:\a\b\c\d
C:\a\b\c\d
Run Code Online (Sandbox Code Playgroud)

当然,您只能在交互式外壳程序中使用此技巧(出于明显的原因)。