これを行う方法が混乱しています。 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
正確に尋ねますTRACKN
。N
最後に、どのように使用するのか分からないので、配列のすべてのインデックスを印刷します。このページbashでこの配列を使用する方法の開始です(TLDPから)。
インデックスを誤って作成していますが(実行するとすぐにわかります)、もう1つの問題は、$
その中に含まれる変数名を割り当てようとすることです。 where Yes valueというset TTITLE$TRACK=TTITLE
変数です。私はこれが何をしているのか自信を持って話すことはできません。TTITLE#
#
$TRACK
変数を使用しようとすると、次のことが行われました。echo ${!TTITLE$TRACK}
、ここでbang(!
)は実際には爆発の順序TTITLE...
(必要ではない)で始まる最新のコマンドを見つけようとしています。