私は何かを表す整数セットを入力として使用するスクリプトを書こうとしています/dev/sda
。たとえば、コマンドライン引数が3&5の場合、出力にはと/dev/sda3
のUUIDが表示されます/dev/sda5
。私のコードは次のとおりです
#!/bin/bash
### Shows UUID of input /dev's - REQUIRES SUDO
## Options:
## [-m] Multiple Devs - returns both dev name and UUID
## [ ] No option - returns only the UUID of the dev.
while getopts m: option
do
case "${option}"
in
m) echo -e "\nDEV\tUUID\n====\t================"
blkid | grep .*sda[\"$@\"] | sed -r 's/\/dev\/([[:alnum:]]+).* UUID="([[:alnum:]]+)".*/\1\t\2/g'
;;
esac
done
grep .*sda[\"$@\"]
私の主な問題は、次のエラーを返す行です。
$ sudo ./dUShow.sh -m 3 5
DEV UUID
==== ================
grep: Unmatched [ or [^
もし私が間違っていないのであれば、これは*.sda[$@]
RegExで上書きされる代替オプション(与えられた入力*.sda[$1$2]
と同じ)を提供しようとすると問題が発生することを意味します。*.sda[35]
どうすればいいですか?
入力例
sudo ./dUShow.sh -m 3 5
希望の出力
DEV UUID
==== ================
sda3 BC4208CF42089076
sda5 968E185A8E183569
付録
この表現.*sda[\"$@\"]
は*.sda[35]
または*.sda[3 5]
?後者なら問題ないでしょうか?では、どうすれば解決できますか?