2012-10-15 249 views
1

非常感謝您提前幫助!Bash - 替代變量

我想改變這個變量:

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

成:

win_path_dir = ģ : /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') 

乾杯!

回答

1

你的做法是好的,只有一點點錯字:

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

不要寫$win_path(沒有$)定義變量win_path的值時。 當您編寫$win_path時,shell將擴展變量的值。

+1

Do'oh!這真是一個初學者的錯誤!謝謝! – RafaelGP

0

不要當你定義或設置變量$先於變量:

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

$導致串$name與可變的值來代替,看bash manpage

0

使用bash替代:

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

注意,定義prefix不是絕對必要的;它只是 免除您需要轉義目錄分隔符。 以下工作很好,但它可讀性稍差:

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

你爲什麼需要一個#? –

+0

這不是絕對必要的;它會將該模式錨定到字符串的開頭,因此您不會將'/ foo/cygdrive/g/other'更改爲'/ foo/G:/ other'。你可以放棄它,在這種情況下,它仍然可以工作。 – chepner