次の式を使用して変数に数値を書きたいのですが、
val=$(ls -al $1 | awk -v a=$i '{if( NR == a ) print $5}')
すべてのiに対して同様の式で0を返すので、問題なくファイル名を書き込みます。
ベストアンサー1
現在のディレクトリの5番目の名前を印刷したいようです。
正しい方法は
shopt -s dotglob
set -- *
printf '%s\n' "$5"
*
これは、拡張ファイル名のワイルドカードパターンによって生成されたリストに位置パラメータを設定します(dotglob
シェルオプションも設定したため、隠された名前を含む)。 5番目の位置パラメータは、アルファベット$5
順に5番目の場所に名前を保持します。ディレクトリに5つ未満の名前が含まれている場合、上記のコマンドは空行を印刷します。
名前にスペース、タブ、または改行が含まれているかどうかは問題ではありません。
変数に名前を付けるには、次のようにします。
val=$5
現在のディレクトリ以外のディレクトリの内容から名前を選択し、ディレクトリと言って$dir
パターン"$dir"/*
として使用しますか?
名前ではなくファイルサイズが必要な場合は、stat
次のようにします。
stat -c %s "$5"
または変数に割り当てるには
val=$( stat -c %s "$5" )
上記はGNUを仮定しstat
、ファイルサイズをバイト単位で提供します(存在すると仮定)。
位置パラメータを中断する代わりに名前付き配列を使用するには、次のようにします。
names=( "$dir"/* )
"${names[4]}"
次に(配列はシェルのインデックス0から始まります)を使用して5番目の名前を取得しますbash
。