【问题标题】:ksh: translate unix path to windows path with sed and place in variableksh:使用 sed 将 unix 路径转换为 ​​Windows 路径并放置在变量中
【发布时间】:2012-03-26 07:07:00
【问题描述】:

在 KornShell (ksh) 上运行它:

echo ${MYVAR} | sed 's/\//\\/g'

如果 MYVAR 是 //myserver/myshare,它可以正常工作 但是做同样的事情并试图将它放入一个变量中,但它失败了 sed:在模式中找到换行符或文件结尾

UNCVAR=`echo ${MYVAR} | sed 's/\//\\/g'`

如何正确将此路径从 UNIX 样式斜杠转换为 windows 样式斜杠?

重要样本数据:

//QFLELSAMPLE/reports

【问题讨论】:

    标签: shell unix scripting sed ksh


    【解决方案1】:

    停止使用反引号的另一个原因(除非您计划在 Solaris/HP/et.al 上使用 Bourne Shell)。根据 1995 年发布的“新 Kornshell 编程语言”,反引号已被弃用!

    MYVAR="//myserver/myshare"
    UNCVAR=$(echo ${MYVAR} | sed 's/\//\\/g')
    echo "$UNCVAR"
    \\myserver\myshare
    

    请注意,我使用的是 $( cmd ) 版本的命令替换。

    我希望这会有所帮助。

    【讨论】:

    • 在我的系统上(在 Windows 服务器上运行的 mks 工具包)我得到了 \myserver\myshare 。它正在吃第一个反斜杠。但是我用我正在使用的输入修改了这个问题,这导致 \r 被解释为一个 ctrl M ,它完全抛弃了输出。所以我失去了第一个反斜杠和第三个反斜杠。似乎我应该只需要逃避那些反斜杠。如果我将它们加倍,我会得到正确的输出。所以谢谢。
    • 哇,忘记了 mkstoolkit(虽然我在 10 多年前就喜欢它了!)只是为了感兴趣,请尝试我的解决方案,但使用 `echo $"$UNCVAR" 。感谢您的积分!
    【解决方案2】:

    完整解决方案:使用 $() 代替 `` 并加倍反斜杠以将它们从 echo 中转义。

    MYVAR="//QFLELSAMPLE/reports"
    UNCVAR=$(echo ${MYVAR} | sed 's/\//\\\\/g')
    echo "$UNCVAR"
    

    奇怪的是,如果您随后导出 UNCVAR 并通过 set 查看它,它的值是:

    \\\\\\\\QFLELITE38\\\\reports
    

    这似乎有两倍的预期反斜杠。 但是通过 echo 传递变量会给出正确的数字,这就是我所追求的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 2014-08-10
      • 2022-01-13
      相关资源
      最近更新 更多