我试图用变量替换输出来给出另一个输出。我遇到问题的变量是$ 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 :(得分:1)
我认为你可能有shell版本问题(你的shell不像你正在使用的符号那样现代)。此帖的先前化身建议:
apps="${app}/rtcom-call-ui/general_call"
或者,用rtcom-call-ui
代替general_call
,您需要使用echo
和sed
(至少在经典shell中 - 可能是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版本可能太旧了。
您可以使用以下方法检查您的shell:
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