【发布时间】:2014-10-29 23:01:34
【问题描述】:
我有 15 个路径存储在一个数组变量中,文件名也存储为另一个数组变量,我想将每个路径绑定到其对应的文件。我正在寻找将每个路径元素与其相应文件绑定的东西,如下所示:
ar1=([1]="path1" [2]="path2")
ar2=([1]="file1" [2]="file2")
我需要:
ar3=([1]="path1/file1" [2]="path2/file2")
我通过一个简单的 for 循环成功管理:
for i in {1..2}; do
ar3=("${ar1[$i]}""/""${ar1[$i]}"".txt")
done
但我需要变量 ar3 用于脚本的其他部分,并且我不能在 for 循环子 shell 之外使用它。
非常感谢, 伙计
【问题讨论】:
-
for 循环不引入子外壳上下文。你不需要像那样插入和退出引号。你也不需要在
[$i]中使用$i,数组索引是一个表达式上下文,所以[i]就足够了。 -
@JohnKugelman 因为我实际上并不知道他的问题 是什么,而我的回答只是对未提出问题中固有的假设的否定。如果问题实际上是“这是否可行,因为我担心子外壳会妨碍”,那么这很可能是答案,在这种情况下,答案是“不,它不会”。
-
你能写出你将如何做循环吗?当我在循环之后放置 echo ${ar3[*]} 时,它不会打印出来。
-
@Guy,for 循环本身不会阻止它的工作,所以你正在代码中的其他地方做一些事情(比如隐式创建一个子shell),这会破坏它。因为您没有向我们展示任何其他代码,所以我们无法告诉您在哪里/如何做错了。
-
顺便说一句,
echo ${ar3[*]}通常是不好的做法——你无法用这种用法区分ar3=( "foo bar" baz )和ar3=( foo "bar baz" ),而ar3=( "*" )会真的 i> 搞砸了(打印当前目录中的文件列表,而不是*)。
标签: arrays bash variables for-loop subshell