0

这是我感兴趣的单行代码(尤其是在变量中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"

返回没有错误:

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

$(dirname ${f})不是按原样回显。

知道怎么做吗?

4

3 回答 3

1

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

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"
于 2017-08-17T12:26:38.990 回答
0

我不知道为什么你echo只需要打印。但是,如果您只想以这种方式进行操作,请参阅以下内容:

echo `find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done`
于 2017-08-17T12:41:27.347 回答
0

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

cmd='find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done'
echo $cmd
于 2017-08-17T12:28:26.367 回答