繁体   English   中英

用变量替换输出以给出另一个输出

[英]Substitute output from variable to give another output

我试图替代变量的输出以提供另一个输出。 我遇到的变量是$ apps。 它给我“语法错误:错误的替换”。

$ appletDir是带有桌面快捷方式的目录。 问题在于某些快捷方式的名称与icon(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

我认为您可能遇到了shell版本问题(您的shell并不像您使用的表示法那样现代)。 该帖子的先前版本建议:

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

或者,用于取代rtcom-call-uigeneral_call ,你需要使用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#!/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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM