我写了这样的脚本:
#!/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
如何同时导出参数并在同一行中回显值?
答案 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] = ...