2016-04-15 107 views
0

好一天的值代入,如何在一個變量

我有一個簡單的UNIX腳本test.sh

我需要替換變量的值。 此變量包含一個目錄路徑。

我test.sh腳本

#!/bin/sh 
filepath="/host/messages/in/documents" 
archivePath=`${filepath/\/in/\/archive/}` 
echo "archive path is " $archivePath 

我得到一個 「壞替代」 錯誤,當我運行它。

爲archivePath所需的輸出應該是:

/host/messages/archive/documents 

什麼我做錯了,這可能是一個可能的解決方案?

+2

錯誤:不讀shell的手冊頁。解決方案:閱讀shell的手冊頁。請記住,並非所有的世界都是一場暴躁。替代不是POSIX shell的一個特性,它是其他一些shell的擴展(想起bash和zsh)。注意:反引起**過程替換**,而不是**參數替換**。 – Jens

+0

如果不能替代,那麼我該如何將'in'替換爲'archive'?. – Chor419

回答

1

必須使用bash(或ksh或zsh的),使用正確的語法${varname/pattern/replacement}patternreplacement逃避\/

#!/bin/bash 
filepath="/host/messages/in/documents" 
archivePath="${filepath/\/in\//\/archive\/}" 
echo "archive path is $archivePath" 
+0

我在我的UNIX操作系統上沒有bash,ksh或zsh。 – Chor419

+0

真的嗎? 'ls -l/bin/sh'和'/ bin/sh --version'說什麼? 普通POSIX sh無法識別'$ {varname/pattern/replacement}'語法。 – fumiyas

0

發現sed的一個解決方案:

#!/bin/sh 
filepath="/host/messages/in/documents" 
echo $filepath | sed -e %s/in/archive/g 
archivePath=`echo $filepath | sed -e s/in/archive/g` 
echo "archive path is $archivePath"