変数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' ;;
単一引用符を使用する必要があります(たとえば、次のような名前にすることができます)。