-1

こんにちは、変数の使用法を学び、理解しようとしていますBash。変数を初期化する方法はどこでも見られますが、その値の使用方法が説明されていないため、間違っているか、概念が間違っています。

例: という変数がありFILES、存在する場合に検索する必要がある X 個の文字列が得られます。このようなもの:

FILES="inf.txt program.c"

ファイルが存在する場合は 1 つずつ確認する必要があります (.txt と .c のファイルはランダムな例であり、それ以上になる可能性があります)。

さて、私の問題は、私が知らないことです...各文字列または各値を新しい順序に割り当てます。それが1つの文字列であれば、それを探すことができると思いますが、いくつかあるため、bashでどのように行われるのかわかりません。

そして、ファイルが存在するかどうかを確認する方法を知っていますが、[-r File]その-e変数の値はありません。

4

2 に答える 2

1

これを行う正しい方法bashは、文字列ではなく配列を使用することです。名前にスペースが含まれるファイルがある場合はどうなりますか?

$ FILES=( "name with    space.txt" inf.txt program.c )
$ for f in "${FILES[@]}"; do
>    echo "$f"
> done

$fループの本文で引用することの重要性を強調するために、最初のファイルに途方もない数のスペースを入れました。echo $f代わりに (引用符なし)で同じコードを実行してみてください。

この時点では、それらは単なる文字列です。演算子bashなど、ファイル名が予期されるコンテキストで使用しない限り、それらがファイル名であるかどうかは気にしません(引数はファイルですか?):-f

$ FILES=( "name with    space.txt" inf.txt program.c )
$ for f in "${FILES[@]}"; do
>    if [ -f "$f" ]; then
>        echo "$f is a file"
>    else
>        echo "$f is not a file"
>    fi
> done

ただし、これはbashではなく であるため、 /コマンドshの代わりに条件式を使用する必要があります。test[

>    if [[ -f $f ]]; then

その式では、必要に応じて引用符を削除できます。それらはすべて必須です(つまり、コードは引用符なしで実行されますが、空白が含まれてい[...]ない場合にのみ実行されます)。$f

于 2013-03-24T14:28:34.473 に答える
0

ループで $FILE 変数をループする必要がありforます。

for file in $FILES
do
[ -r "$file" ] && echo File $file exists and is readable || echo F*emphasized text*ile $file does not exists
done
于 2013-03-24T10:36:01.250 に答える