Bash:为什么我不能为变量分配绝对路径?

时间:2014-10-24 01:59:28

标签: linux bash shell

我试图在Bash中为变量分配一个绝对路径:

#!/bin/bash
DIR= "/home/foobar"

echo "$DIR/test"

输出:

./test.sh: line 2: /home/foobar: Is a directory
/test

我不明白那里发生了什么,请帮助我。

3 个答案:

答案 0 :(得分:4)

删除"/home/foobar"之前的空格:

#!/bin/bash
DIR="/home/foobar"

echo "$DIR/test"

答案 1 :(得分:0)

尝试另一个shell。

#!/bin/sh

DIR='/home/foobar'
echo "$DIR/test"

或者,如果您想检查变量是否已初始化,请使用此功能。

#!/bin/sh

DIR='/home/foobar'
[ -z "$DIR" ] && echo "Variable not declared" && exit
echo "$DIR/test"

答案 2 :(得分:0)

一般语法是

[ assignment=value ... ] command arguments

所以你正在分配DIR=并运行命令/home/foobar - 这当然不是一个有效的命令,而是一个目录;因此错误信息。

试试这个:

DIR=/home/foobar bash -c 'echo "DIR is \"$DIR\""'   # DIR is "/home/foobar"
echo "done. DIR is now \"$DIR\""   # DIR is now ""

您将看到DIR仅在第一个命令期间分配,然后丢失。

要为脚本的其余部分设置它,您可以执行

DIR=/home/foobar
echo "DIR is now $DIR"

如果要将其公开给子进程,可以添加export

DIR=/home/foobar
bash -c 'echo "Before export: DIR is \"$DIR\""'  # DIR is ""
export DIR
bash -c 'echo "After export: DIR is \"$DIR\""'   # DIR is "/home/foobar"