关于linux:“命令未找到”管道输出存储在变量中时要切换的变量

“Command not found” piping a variable to cut when output stored in a variable

本问题已经有最佳答案,请猛点这里访问。

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

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

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

1
/just/a/string

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

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

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

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

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

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

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


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

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

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

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


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

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