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
4

1 回答 1

1

我认为您可能遇到了 shell 版本问题(您的 shell 不像您使用的符号那样现代)。这篇文章的前身建议:

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

或者,要替换rtcom-call-uigeneral_call,您需要使用echoand sed(至少在经典 shell 中——它可能是bash内置的):

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

符号${var|continuation}(其中|表示任意标点符号)用于修改替换的值。例如:

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

将复制 的值$app,除非$app根本没有设置(这里不相关;对环境变量有用)或者 if$app是一个空字符串。

您得到的错误是因为在您的 shell 版本中/没有以 ' '开头的有效替换。这种表示法似乎在某些版本的 Bash 中有效(包括我必须使用的那个);不知道什么时候加的。但是,如果您使用的 shell 抱怨该符号,那么显然它对于您正在使用的 shell 版本是不正确的。

根据 shebang 线 ( #!/bin/shvs #!/bin/bash),它的工作方式可能有所不同。否则,您机器上的 Bash 版本可能太旧了。

您可以通过以下方式检查您的外壳:

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
于 2010-09-06T14:08:55.087 回答