0

変数からの出力を別の出力に置き換えようとしています。私が問題を抱えている変数は$appsです。「構文エラー:置換不良」が表示されます。

$ appletDirは、デスクトップショートカットのあるディレクトリです。問題は、一部のショートカットがicon(png)と同じ名前を持たないことです。そのため、プログラム名をそれにリンクしているpngに置き換える必要があります。以下のコメントアウトされたifステートメントで動作しました。この置換が機能する場合、私のスクリプトは見栄えが良くなります。原因私はこれのいくつかを置く必要があります。

アイコンフォルダを調べるときに、「rtcom-call-ui」ではなく「general_call」を検索するようにします。原因は、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

シェルのバージョンに問題があると思います (シェルは、使用している表記ほど最新ではありません)。この投稿の以前の化身は、次のことを示唆していました。

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

または、 で置き換えるrtcom-call-uiには、 andgeneral_callを使用する必要があります(少なくとも従来のシェルでは、それを行うための組み込み機能がある可能性があります)。echosedbash

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

表記${var|continuation}(where|は任意の句読点を表す) は、置換される値を変更するために使用されます。例えば:

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

がまったく設定されていない場合 (ここでは関係ありません。環境変数で役立ちます)、またはが空の文字列$appでない限り、 の値をコピーします。$app$app

このエラーは、お使いのバージョンのシェルに/' 'で始まる有効な置換がないためです。この表記法は、Bash の一部のバージョン (私が使用しなければならないバージョンを含む) で有効であるようです。いつ追加されたのかわからない。しかし、使用しているシェルが表記に問題がある場合は、使用しているシェルのバージョンが正しくないことは明らかです。

シバン ライン ( #!/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 に答える