egrepを使用した変数のスクリプトの正規表現

egrepを使用した変数のスクリプトの正規表現

変数A_DESTINATION(ディレクトリ)を解析し、/.../の間の単語のみを呼び出したいとします。

case "$TR_TORRENT_INFO" in
    *test1.com*)
    A_DESTINATION=${A_DESTINATION}/Books/
    ;;
    *test2.com*)
    A_DESTINATION=${A_DESTINATION}/Movies/
    ;;
    *test3.com*)
    A_DESTINATION=${A_DESTINATION}/Music/
    ;;
    *)
    A_DESTINATION=${A_DESTINATION}/Miscellaneous/
    ;;
esac

test="$(egrep '\/([^/.]+)\/$' $A_DESTINATION)"
echo test

スクリプトに正規表現がありますが、ログにフォルダー(たとえば、この場合/ Miscellaneous /)は正常に返されません。次の内容のみが表示されます。

+ A_DESTINATION=/mnt/sda1/Miscellaneous/
+ egrep \/([^/.]+)\/$ /mnt/sda1/Miscellaneous/
+ test=
+ echo test
test

私は何が間違っていましたか?ありがとうございます!

ベストアンサー1

最後のディレクトリサフィックスを追加して$A_DESTINATIONからgrep別の方法で再抽出するのではなく、ステートメントに別の変数(たとえば$final)を使用してから最後にcase追加するのはどうですか?$A_DESTINATIONたとえば、

case "$TR_TORRENT_INFO" in
    *test1.com*) final='Books' ;;
    *test2.com*) final='Movies' ;;
    *test3.com*) final='Music' ;;
              *) final='Miscellaneous' ;;
esac

A_DESTINATION="$A_DESTINATION/$final/"

echo "$final"

これは効果があり、より簡単で、私の考えでは読書にも簡単です。

しかし、本や映画などを囲む一重引用符は必ずしも必要ではありませんが(文字列にスペースやシェルメタ文字がないため)問題にならず、IMO一重引用符で文字列を修正するのが良い習慣です。また、最後のディレクトリ名にスペースを含む他の大文字と小文字を追加するには、final='Other Junk' ;;単一引用符を使用する必要があります(たとえば、次のような名前にすることができます)。

おすすめ記事