不明なファイル名のデータを配列に読み込みますか? [閉鎖]

不明なファイル名のデータを配列に読み込みますか? [閉鎖]

質問:

ファイル名:Celebs ファイル内:

Beyonce
Brittney
Kevin
George

readとコマンドを使用してコードを書く必要がありますwhile。これは私が今まで持っているものですが、私のシェルスクリプトでは実行されていないので間違っているようです。

Namesまた、ファイル名が常に機能するわけではなく、コードにランダムなファイルを置く方法がわからないと言われました。また、不明なファイル名とファイル内の人の名前で配列を作成し、端末から印刷する必要がありました。

だから私も印刷する必要があります。

    list= find -name "Celebs" -type f #if its an unknown file name this method won't work
    start=0 #position of the empty array
    declare -a People
    while read -r line
      do
   People[$start]=$line #lines read to be stored in the array
    ((start++))
  done<$list

答え1

仮定:

  1. これはbashスクリプトです。
  2. 標準入力からデータを読み込みます。
  3. 入力の各行は配列に保存され、すべての入力を読み取った後に表示されます。

標準入力からデータを取得すると、データが元々どこに保存されているかわからない問題が解決されます。これにより、スクリプトユーザーはコマンドからデータを自由に入力したり、ファイルから入力をリダイレクトしたりできます。

解決策:

#!/bin/bash

# 'names' is an array, empty from the start
declare -a names=()

while read name; do
    # Append the name to the end of the array
    names+=( "$name" )
done

# Output all names with each being prepended by "Name: "
printf 'Name: %s\n' "${names[@]}"

名前を読んでいるので選択します。いいえ-rと一緒にスイッチを使用してくださいread。私の知る限り、バックスラッシュを含む名前はありません...

演算子を使用して配列に値を追加できます+=

printf入力を「ループ」して配列の各要素にフォーマットを適用するので、出力を実行するためにループは必要ありません。1

質問のデータを使ってテストしてみてください。

bash-4.4$ bash script <testdata
Name: Beyonce
Name: Brittney
Name: Kevin
Name: George

1は printf配列についてはわかりませんが、インポートされた各入力行を使用し、書式設定文字列に従って書式設定します。変数の拡張により、${names[@]}複数行の入力が発生しますprintf

関連情報