bashスクリプトは金額を尋ねてから、あまりにも多くのプロンプトを求めます。

bashスクリプトは金額を尋ねてから、あまりにも多くのプロンプトを求めます。

これを行う方法が混乱しています。 CDにいくつのトラックがあるかを尋ね、トラック名を何度も尋ね、各トラックをフォーマットしてファイルにエクスポートするスクリプトを作成したいとします。これまで試してみましたが間違っていました。

#!/bin/bash

read -p 'How many tracks are there?' TRACKCOUNT
#while not amount of tracks
TRACK=1
while [ $TRACK -le $TRACKCOUNT ]
do
#indirection not a good idea?
#http://mywiki.wooledge.org/BashFAQ/006#Indirection
#ask for track<count> title save to variable TTITLE
read -p 'Track '$(($TRACK + 1))': ' TTITLE
TTITLE="${TTITLE:-No Name}"
set TTITLE$TRACK=TTITLE
echo ${!TTITLE$TRACK}
(( TRACK++ ))
done

私が期待するのは、次のファイルです。

TTITLE1=Uptown Funk!
TTITLE2=Thinking Out Loud
TTITLE3=See You Again

私が得るものは何も返されないline 14: ${!TTITLE$TRACK}: bad substitution ので、set | grep TITLE変数が設定されていません。

ベストアンサー1

修正する:

指示に従ってファイルに印刷するには、更新されたスクリプトは次のとおりです。

#!/bin/bash
read -p 'How many tracks are there?' TRACKCOUNT
TRACK=1
while [ $TRACK -le $TRACKCOUNT ]
do
    read -p "Track $TRACK: " TTITLE
    echo "TTITLE$TRACK=${TTITLE:-No Name}" >> ./track_output.txt
    (( TRACK++ ))
done

質問のタイトルに答えるには、スクリプトが機能するように変更し、結果をトラック番号でインデックス付けされた配列に追加します(あなたの意見に従って)。

#!/bin/bash
declare -a TRACK_ARRAY
read -p 'How many tracks are there?' TRACKCOUNT
TRACK=1
while [ $TRACK -le $TRACKCOUNT ]
do
    read -p "Track $TRACK: " TTITLE
    TRACK_ARRAY[$TRACK]="${TTITLE:-No Name}"
    (( TRACK++ ))
done

echo "${TRACK_ARRAY[*]}"

これにより入力が承認され、ループが発生し、ユーザーに入力した数字がどこにあるかをTRACK1正確に尋ねますTRACKNN最後に、どのように使用するのか分からないので、配列のすべてのインデックスを印刷します。このページbashでこの配列を使用する方法の開始です(TLDPから)。

インデックスを誤って作成していますが(実行するとすぐにわかります)、もう1つの問題は、$その中に含まれる変数名を割り当てようとすることです。 where Yes valueというset TTITLE$TRACK=TTITLE変数です。私はこれが何をしているのか自信を持って話すことはできません。TTITLE##$TRACK

変数を使用しようとすると、次のことが行われました。echo ${!TTITLE$TRACK}、ここでbang(!)は実際には爆発の順序TTITLE...(必要ではない)で始まる最新のコマンドを見つけようとしています。

おすすめ記事