入力をファイル名として受け入れ、アルファベット文字で始まるかどうかを確認するbash関数を作成していますが、ファイル名をテストするために使用するgrepは、指定されたすべての入力を受け入れます。
これは私のコードです...
function getname(){
fname=$1;
if [ ! $1 ]; then
read -p "Enter a file name: " fname;
fi;
until ( grep -E '^[a-zA-Z_]\w+' <<< "$fname" > /dev/null 2>1&); do
if [ -d $fname ]; then
echo "Paths are not a legal file name.";
fi;
read -p "Enter a legal file name: " fname;
done
}
引数1または引数なしを正しく受け入れ、引数がない場合はファイル名の入力を求められますが、渡された文字列はすべて受け入れます。それでは、fnameとして保存された文字列をどのように適切に把握するのですか?
ベストアンサー1
私はそれを使用する方法を知りませんgrep
。代わりに、組み込みtest
演算子(..)を使用して正規表現を直接処理できる[[
ファイル名を比較します。]]
function getname(){
local fname="$1"
[[ -z "$fname" ]] && read -p "Enter a file name: " fname
until [[ "$fname" =~ ^[[:alpha:]] ]] && [[ -f "$fname" ]]
do
[[ -d $fname ]] && echo "Paths are not a legal file name."
read -p "Enter a legal file name: " fname
done
}