質問:
ファイル名: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
仮定:
- これは
bash
スクリプトです。 - 標準入力からデータを読み込みます。
- 入力の各行は配列に保存され、すべての入力を読み取った後に表示されます。
標準入力からデータを取得すると、データが元々どこに保存されているかわからない問題が解決されます。これにより、スクリプトユーザーはコマンドからデータを自由に入力したり、ファイルから入力をリダイレクトしたりできます。
解決策:
#!/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
。