此查询涉及如何在环境设置文件viz environment_var.sh中声明Linux中的环境变量。这个文件有一堆导出命令(如下所示) -
echo "Input Variable: "$1
if [ $1 = "value1" ]; then
variable1=""
else
variable1=$1
fi
export variable2=app_name${variable1}.subcategory2
export variable3=`echo ${variable1}/subfolder1/`
我的查询与第二个导出语句有关,其中echo已用于变量3.是否有任何特定原因使用echo或者它是否已声明如下,而无需使用反引号和回声 -
export variable3=${variable1}/subfolder1/
感谢您在这方面的投入。
答案 0 :(得分:3)
echo
比无用更糟糕。对于echo
,您的目录名称受路径名扩展和分词的约束。
例如,考虑一个包含这些子目录的目录:
$ find . -name 'subfolder1'
./dir1/subfolder1
./dir*/subfolder1
./dir2/subfolder1
现在,让我们用echo
执行命令:
$ var1='dir*'
$ var3=`echo ${var1}/subfolder1/`
要显示var3
的精确值,请使用declare -p
:
$ declare -p var3
declare -- var3="dir1/subfolder1/ dir2/subfolder1/ dir*/subfolder1/"
由于路径名扩展,var3
会因人们的期望而改变。
现在,让我们在没有echo
的情况下再试一次:
$ var1='dir*'
$ var3=${var1}/subfolder1/
$ declare -p var3
declare -- var3="dir*/subfolder1/"
在这种情况下,没有执行路径名扩展,而var3
正是我们指定的那样。
结论:除非您明确要路径名扩展或分词,否则请勿使用echo
表单。 < / p>
正如Charles Duffy指出的那样,如果您确实需要路径名扩展,那么您可能还想使用数组,而不是echo
。观察:
$ var1='dir*'
$ arr3=(${var1}/subfolder1/)
$ declare -p arr3
declare -a arr3=([0]="dir1/subfolder1/" [1]="dir2/subfolder1/" [2]="dir*/subfolder1/")
此处,所有三个目录名称都正确显示为arr3
中的单独条目。
使用bash,观察:
$ var1='-n dir'
$ var3=`echo ${var1}/subfolder1/`
$ declare -p var3
declare -- var3="dir/subfolder1/"
在这种情况下,我们将var1
分配给了-n dir
,但在var3
中,-n
消失了。这是因为它被解释为不是要打印的参数,而是echo
和echo
的一个选项。