Bash - 替换变量

时间:2012-10-15 07:44:15

标签: bash sed

非常感谢您提前帮助!

我想转换这个变量:

win_path = / cygdrive /克 /virtual_tours/.archives/vt_template_8_0_15/test_directory_2/panos

成:

win_path_dir = G: /virtual_tours/.archives/vt_template_8_0_15/test_directory_2/panos

这是我到目前为止所做的,但它不起作用。 当我回显$ win_path时,它什么都不返回(黑色,空白空间)

$win_path=$(echo $i | sed -e 's/\/cygdrive\/g/G\:/g')

干杯!

4 个答案:

答案 0 :(得分:1)

你的方法很好,只有一点错字:

win_path=$(echo $i | sed -e 's/\/cygdrive\/g/G\:/g')

在定义变量win_path的值时,不要写$win_path(no $)。 当您编写$win_path时,shell会扩展变量的值。

答案 1 :(得分:0)

在定义或设置变量时,不要在变量前加$

win_path=$(echo $i | sed -e 's/\/cygdrive\/g/G\:/g')

$会将字符串$name替换为变量 name 的值,请参阅bash manpage

答案 2 :(得分:0)

如果有葡萄酒,winepath就是工作的工具。

答案 3 :(得分:0)

使用bash替换:

prefix=/cygdrive/g
win_path=${winpath/#$prefix/G:}

请注意,定义prefix并非绝对必要;它只是 减轻了逃避目录分隔符的需要。该 下面的工作很好,虽然它的可读性稍差:

win_path=${winpath/#\/cygdrive\/g/G:}