0

シェル スクリプトを書いているときに、予期しないエラー (これまで見たことがない) が表示されます。

コードは次のようなものです。

 num=1

 case $line in
    *.mp3*)
    s$num=$total_seconds; # $total_seconds is a variable with numbers like: 11.11
    a$num=$file;
    num=$(($num + 1));
    ;;
 esac

これらの変数の内容を見ようとしても、何も表示されません。

echo $s1 $a1
echo $s2 $a2

あるいは:

for ((i=1; i<=$num; i++))
do
  echo $s$i $a$i
done
4

2 に答える 2

2

bash(または配列をサポートする任意のシェル)を使用しても問題がない場合は、配列を使用します。

num=1
declare -a s
declare -a a
case $line in
    *.mp3*)
        s[num]=$total_seconds # $total_seconds is a variable with numbers like: 11.11
        a[num++]=$file
        ;;
esac

POSIXly厳格なものが必要な場合は、状況はさらに厳しくなります。私はあなたのコードについてもっと知らずにそれについて提案したくありません。

脇:11.11のような文字列$total_secondsを持つ変数です。これらのシェルは浮動小数点数をサポートしていません。

于 2013-02-04T20:40:51.340 に答える
2

bashLHS が式ではなくリテラルである場合にのみ、変数の代入を認識します。このような動的に生成された変数名を持つようにコードを少し変更することもできますが、

num=1

case $line in
  *.mp3*)
  declare s$num=$total_seconds; # $total_seconds is a variable with numbers like: 11.11
  declare a$num=$file;
  num=$(($num + 1));
  ;;
esac 

より良いアイデアは、kojiro によって提案された配列を使用することです。

それらに動的にアクセスするには、間接展開を使用する必要があります。

num=1
var="s$num"
echo ${!var}  # var must be the name of a variable, not any other more complex expression
于 2013-02-04T20:46:52.003 に答える