2016-09-29 9 views
0

私の単純な努力は次のとおりです。私のホームフォルダ、0.mp3、1.mp3、2.mp3、3.mp3としましょう。私はcatコマンドcat {0..3} .mp3> total.mp3の契約形式を使用して、bashスクリプトを使用して、これらのファイルを1つのmp3ファイルにマージするように "merge.sh"としましょう。番号は、コマンドラインパラメータとして指定されなければならない、すなわち契約されたcatコマンド "cat {#firstNumber ..#secondNumber} .mp3> total.mp3"を使用してbashスクリプトのmp3ファイルをマージする

のbash merge.sh 0 3

残念ながら

、どちらも書き込み

猫{$ 1。。$ 2} .MP3> total.mp3

cat {"$ 1" .. "$ 2"} .mp3> total.mp3

作品私は明示的にスクリプトでこれらの数に入れた場合、すなわち

猫を書き、

どちらの場合も、シェルは

「そのようなファイルやディレクトリはありません:{0..4} .MP3猫」を応答します{0..4} .mp3> total.mp3、

スクリプトは正常に実行されます。しかし、なぜ私はこの番号をコマンドラインのパラメータで渡すことができないのですか?私はここで何が欠けているのですか?

ありがとうございます!

P.S:私はbashスクリプトの専門家ではありません。

+1

、[制限は、変数にすることはできません](http://stackoverflow.com/q/19432753/6843677) – sorontar

+0

おかげ明確化のため!:) – user2949762

答えて

0

ループにはforループを使用して配列にデータを入力し、配列を使用します。

for ((i=$1; i <= $2; i++)); do 
    arr+=($i.mp3) 
done 

cat "${arr[@]}" > total.mp3 

実際には、アレイを不要にすることができます。これは少し効率が悪いですが、妥当な数のファイルでは目立たないようにしてください。 bashの "ブレース展開" `{1..3}`の既知の制限だ

for ((i=$1; i<=$2; i++)); do 
    cat "$i.mp3" 
done > total.mp3 
+0

ありがとう、それだけでも動作します! :) – user2949762

関連する問題