はい、exec
は、ファイル記述子番号の変数を受け入れません。コメントで指摘したように、あなたは$i
が1
であれば、これらの複雑な引用符は、そのEVAL-EDを確保
exec 9>"abc/$i"
に相当し、その後のexec-edコマンドでも安全である、
eval "exec $((i + 8))>"'"abc/$i"'
を使用することができますファイル名がabc/1
以外に変更された場合。
しかしthere is警告:彼らは、ファイルと競合する可能性として9より大きいファイル記述子を使用して
リダイレクトは、注意して使用する必要があるシェルは内部的に使用しています記述子。
あなたのタスクは、連続したファイルディスクリプタ番号を必要としないのであれば、あなたは自動的に割り当てられた記述子を使用することができます。
ファイルディスクリプタ番号が先行することができる。各リダイレクトではなく、言葉が先行することができます形式:{varname}
。この場合、>&-
と<&-
を除くリダイレクション演算子ごとに、シェルは10より大きいファイル記述子を割り当ててvarname
に割り当てます。
ので、
exec {fd}>"abc/$i"
echo "$fd"
はabc/1
と印刷ファイルディスクリプタ番号(例えば10
)に書き込むためのファイルディスクリプタ10(またはそれ以上)を開きます。
また、 '$ [expression]'は廃止された構文です。 '$((式))'に移動してください – anishsane
'eval"を試してくださいexec $((i + 8))> abc/$ i "' – anishsane