从变量替代输出以给出另一个输出

问题描述:

我试图用变量替代输出来给出另一个输出。我遇到的问题是$ 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

我认为你可能有一个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