Если $1==3 и $2==5, то
grep.*sda[\"$@\"]
превращается в
grep.*sda[3 5]
Это проблема из-за отсутствия кавычек. Попробуйте вместо этого:
regex=".*sda($( IFS='|'; echo "$*" ))\\>" # =>.*sda(3|5)\>
blkid | grep -E "$regex" |...
\>
— это граница слова, чтобы сделать регулярное выражение более точным.
Некоторая документация по разновидностям регулярных выражений GNU grep:
Существуют форматы для этой панели :_в _слева, панели _в _справа, панели _в _вверху, панели _в _внизу.