基于可变内容的bash大括号扩展无法正常工作 [英] bash brace expansion based on variable content not working

查看:49
本文介绍了基于可变内容的bash大括号扩展无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我怎样才能使bash扩展到传递给mkdir的变量中找到的所有内容?到目前为止,我已经尝试使用 eval bash -c ,但是似乎没有任何作用

how can i make bash expand whatever it finds in a variable i pass to mkdir? so far i've tried using eval and bash -c, but nothing seems to work

LEVEL_1=1,2,3
LEVEL_2=a,b,c

DATA_L1="/tmp/{$LEVEL_1}"
DATA_L2="$DATA_L1/{$LEVEL_2}"

for LINE in $(cat file.txt) ; do
  #"cat" here returns values like 
  #$DATA_L2/yy/data

  mkdir -pv $LINE #it actually contains e.g. this $DATA_L2/yy/data
done

我希望它将扩展到

mkdir -p /tmp/1/a/yy/data
mkdir -p /tmp/2/a/yy/data
mkdir -p /tmp/3/a/yy/data
mkdir -p /tmp/1/b/yy/data
mkdir -p /tmp/2/b/yy/data
mkdir -p /tmp/3/b/yy/data
mkdir -p /tmp/1/c/yy/data
mkdir -p /tmp/2/c/yy/data
mkdir -p /tmp/3/c/yy/data

推荐答案

我怀疑您的问题是,您有两层的扩展层,即使您未在问题中表明这一点.也就是说,您显示:

I suspect your problem is that you have two layers of expansion, even though you don't show that in your question. That is, you show:

mkdir -pv $DATA_L2/yy/data

如果您简单地向其中添加 eval ,这将起作用:

And this would work if you simply added an eval to it:

eval mkdir -pv $DATA_L2/yy/data

但是在循环中,您实际上并没有运行上面的命令.我认为您正在执行以下操作:

But inside your loop, you're not actually running the above command. I think you're running something like:

mkdir -pv $LINE

如果我们在该 mkdir 前面粘贴一个 echo ,我们可以看到:

If we stick an echo in front of that mkdir, we can see that:

echo mkdir -pv $LINE

结果:

mkdir -pv $DATA_L2/yy/data

并且:

eval echo mkdir -pv $LINE

结果:

mkdir -pv /tmp/{1,2,3}/{a,b,c}/yy/data

如果您加倍评估:

eval eval echo mkdir -pv $LINE

您会找到想要的东西:

mkdir -pv /tmp/1/a/yy/data /tmp/1/b/yy/data /tmp/1/c/yy/data /tmp/2/a/yy/data /tmp/2/b/yy/data /tmp/2/c/yy/data /tmp/3/a/yy/data /tmp/3/b/yy/data /tmp/3/c/yy/data

但是两次 eval 是一个很好的信号,需要重新考虑您解决问题的方法.

But a double eval is a really good sign that need to rethink your approach to the problem.

这篇关于基于可变内容的bash大括号扩展无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆