当输出存储在变量中时,“未找到命令”管道变量

时间:2017-11-14 12:31:25

标签: linux bash echo

在bash脚本中,我使用变量来保存这样的路径:

MY_DIR=/just/a/string/to/my/path

我想删除它的最后两部分,看起来像这样:

/just/a/string

我正在使用'cut'来做,像这样:

echo $MY_DIR | cut -d'/' -f-4

输出是我所期望的。精细。 但我想存储在另一个变量中,如下所示:

MY_DIR2=$($MY_DIR | cut -d'/' -f-4)

当我执行脚本时,我收到错误:

... /just/a/string/to/my/path: No such file or directory

为什么带有echo的直接输出有效,但是将输出存储在变量中不是?

2 个答案:

答案 0 :(得分:1)

您需要使用管道将输入字符串传递给shell命令,在这种情况下cut或任何标准shell命令,从stdin读取,行为。一些方法可以使用管道

dir2=$(echo "$MY_DIR" | cut -d'/' -f-4)

(或)使用here-string,它是内置的shell而不是启动外部shell进程

dir2=$(cut -d'/' -f-4 <<< "$MY_DIR")

答案 1 :(得分:-1)

使用严重重音(`)来模拟命令,并使用echo。

MY_DIR2=`echo $MY_DIR | cut -d'/' -f-4`