将 dirname 的操作数指定为 echo 中的 bash 变量

specifying operand to dirname as a bash variable inside echo

这是我感兴趣的一行(尤其是在变量 out 中):

find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done

我需要先回显这个单行代码,然后再将它输送到另一个程序中,但它失败了:

echo "find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done"

带有以下消息:

dirname: missing operand
Try `dirname --help' for more information.
find ~ | head -3 | while read f; do out=; echo ; done

所以我用单引号和双引号:

echo "find ~ | head -3 | while read f; do out=$(dirname "'${f}'"); echo "'${out}'"; done"

哪个returns没有错误:

find ~ | head -3 | while read f; do out=.; echo ${out}; done

但是 $(dirname ${f}) 没有回显 原样

知道怎么做吗?

为防止替换使用单引号或转义 $ :

echo 'find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done'

echo "find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done"

使用变量存储命令并回显变量:

cmd='find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done'
echo $cmd

我不知道为什么你只需要用 echo 打印。但是,如果你只想要那样,请参考以下内容:

echo `find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done`