私のスクリプトが機能しないのはなぜですか? [コピー]

私のスクリプトが機能しないのはなぜですか? [コピー]

こんにちは、私は次のようにmvコマンドと中括弧拡張を使用して一連のディレクトリを移動しようとしています。

#!/bin/bash
...
group_name=$1
group=$((total/set))
group=$((group-1))
mkdir "$group_name""1" 
mv dat{10.."$group"} "$group_name""1"
...

この機能は次のように使用されます。

grouping_dirs 合計 group_name

例: grouping_dirs 30 2 dir_name

私のディレクトリのリストは次のとおりです。

dat10 dat11 dat12 dat13 dat14 dat15など。

しかし、私はただdat{10..14}ディレクトリをdir_name1に移動したいと思います。

ただし、次のエラーが発生します。

mv: 'dat{10..14}' を計算できません: そのファイルまたはディレクトリがありません

ディレクトリが存在しても。私は変更しようとしたのでこれを知っています。

mv dat{10.."$group"} ... to mv dat{10..14} ...

効果がありました。私は中かっこ内に「」を正しく使用していないと思いますが、私はbashスクリプトにはあまり慣れていません。だからあなたの洞察力に感謝します!ありがとうございます!

ベストアンサー1

問題は、Bashの中かっこ拡張が変数拡張の前に発生することです。これは、中かっこ拡張が変数を考慮しないことを意味します。あなたはそれを使用することができます:

eval "echo dat{10..$group}"

次のように出力されます。

dat10 dat11 dat12 dat13 dat14

あなたの場合は、以下を使用してください。

mv $(eval "echo dat{10..$group}") "$group_name""1"

おすすめ記事