将相同的值传递给更多变量

时间:2018-11-20 06:54:45

标签: bash

我写了这样的脚本:

#!/bin/bash
set -e

dirs=()
dirs[0]=`export DIR_1=./dir1 && echo $DIR_1`
dirs[1]=`export DIR_2=./dir2 && echo $DIR_2`

for v in ${dirs[@]}; do

  echo $v;
  mkdir -p $v

done

# Here is my question: why it is null???
echo $DIR_1

如何同时导出参数并在同一行中回显值?

2 个答案:

答案 0 :(得分:1)

bash中的“ <<<”运算符称为此处字符串。

如果您想在一行上进行多个分配,请按如下所示使用read

read -r var1 var2 var3 <<< $(echo val1 val2 val3)

您在回显字符串中的每个单词都将分配给每个变量。

答案 1 :(得分:1)

发表评论后,我发布了此回复,解释了我的意思是“而不是回声...”

原始代码行是:

dirs[0]=`export DIR_1=./dir1 && echo $DIR_1`

在这里,导出不起作用,因为导出是在另一个shell实例下执行的,因为您使用了反勾号。在子外壳程序中,将执行导出,但是不能将“修改后的环境”“移植回”。

相反,要获得相同但有效的结果,您可以编写:

export DIR_1=./dir1;  dirs[0]=$(echo $DIR_1)

以上一行与您的原始行等效,它做的完全相同,包括分配给dir [0]的奇怪方法,但是导出是在本地shell中执行的,并导出到所有将来的子级。我的意思是您可以在“ export DIR_1 ...”之后写任何命令,甚至是dirs [0] = ...