変数名をgrepする方法

変数名をgrepする方法

入力をファイル名として受け入れ、アルファベット文字で始まるかどうかを確認する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
}

おすすめ記事