2010-09-06 90 views
0

我試圖用變量替代輸出來給出另一個輸出。我遇到的問題是$ apps。它給了我「語法錯誤:錯誤的替代」。從變量替代輸出以給出另一個輸出

$ appletDir是一個桌面快捷方式的目錄。問題是某些快捷方式與圖標(png)名稱不同。所以我需要用連接到它的png替換程序名稱。我把它和註釋掉的if語句一起使用。如果這個替代可以工作,那麼我的腳本會更好看。因爲我需要放下一些這個。

我希望它在通過圖標文件夾時查找「general_call」而不是「rtcom-call-ui」。因爲png被稱爲「general_call」。圖標文件夾是變量$ icoDir64 $ icoDirSca。

for applet in $appletDir* 
do 

app=`basename $applet | sed -e 's/.*://g' -e 's/.*osso-//g' -e 's/\.desktop.*//g'` 
apps="${app/rtcom-call-ui/general_call}" 
    #if [ "${app}" = "rtcom-call-ui" ]; then 
    # app="general_call" 
    #fi 
#echo $apps 
#done 
#exit 0 

found=`find ${icoDir64} ${icoDirSca} -name "*.png"` 

for file in $found 
do 
    base="`basename ${file}`" 

    if [ "${base}" = "${app}.png" -o "${base}" = "tasklaunch_${app}.png" -o "${base}" = "general_${app}.png" ]; then 
     echo "WORKING!!!!!!!!!!!!!!!!!! $file" 
    fi 
done 
done 
+0

註釋掉的代碼應該是'應用='不'應用='到幾分相似是到'應用= $ {應用/。 ../...}行。 – 2010-09-06 14:09:28

+0

是的,但我把if語句換成了$ apps替換變量..現在感謝Jonathan,我將刪除if-statment,因爲它不再需要,並且在替換變量之後篡改腳本。 – AlMehdi 2010-09-06 14:51:08

+1

如果你的文件名中有空格,最好把'find'變成'while read'循環,而不是用'for'遍歷'find'的結果。 – 2010-09-06 15:20:17

回答

1

我認爲你可能有一個shell版本問題(你的shell是不是你正在使用的符號作爲現代)。這個帖子的前世建議:

apps="${app}/rtcom-call-ui/general_call" 

或者,對於general_call替代rtcom-call-ui,你需要使用echosed(至少在經典的貝殼 - 這可能是bash有一些內置的做):

apps=$(echo "${app}" | sed s/rtcom-call-ui/general_call/) 

記號${var|continuation}(其中|表示任意的標點字符)被用於修改替換的值。例如:

apps="${app:-/something/suitable/as/the/default}" 

將複製的$app價值,除非$app完全不設置(不是與此有關;與環境變量非常有用),或者如果$app是一個空字符串。

您得到的錯誤是因爲在您的shell版本中沒有以'/'開頭的有效替換。這個表示法在某些Bash版本(包括我必須使用的版本)中似乎是有效的;我不知道它何時添加。但是如果你使用的shell抱怨這個符號,那麼顯然它對於你正在使用的shell的版本是不正確的。

根據shebang線(#!/bin/sh vs #!/bin/bash),它可能工作不同。否則,你機器上的Bash版本可能太舊了。

您可以檢查你的殼(S):

for app in /some/location/rtcom-call-ui/where.png /another/location/nowhere/thing.png 
do 
    apps=${app/rtcom-call-ui/general-call} 
    echo $app 
    echo $apps 
done 
+0

謝謝!這擺脫了「語法錯誤」,但沒有按照我的意圖去做。它在所有輸出後面添加了「/ rtcom-call-ui/general_call」,所以它看起來像「xterm/rtcom-call-ui/general_call」。它沒有做任何替代.. – AlMehdi 2010-09-06 14:15:51

+0

謝謝!我希望我的最初想法能奏效..但可能如你所說。一個版本的東西..我看到它在一個指南,並認爲我可以試試看。我會用你指出的sed方式去做。它會幾乎一樣好。 ;) – AlMehdi 2010-09-06 14:44:33