Shell 在linux中将输出行拆分为多行

Shell 在linux中将输出行拆分为多行,shell,Shell,我的代码是: #!/bin/bash dir="$1" echo -n "file size:" du="$(du $dir -hab | sort -n -r | tail -1)" printf "%s\n" "echo "$du"" 它将输出显示为: file size:echo 0 ./.config/enchant/en_US.dic 我的预期产出是: file size: 0 ./.config/enchant/en_US.dic 应该像上面那样显示。路径应该在一

我的代码是:

#!/bin/bash
dir="$1"

echo -n "file size:"
du="$(du $dir -hab | sort -n -r | tail -1)"
printf "%s\n" "echo "$du""
它将输出显示为:

     file size:echo 0
./.config/enchant/en_US.dic 
我的预期产出是:

file size: 0
./.config/enchant/en_US.dic

应该像上面那样显示。路径应该在一个新行中,有一个选项卡空间。

看起来您应该使用如下内容:

#!/bin/bash

dir=$1
printf 'file size: %s\n\t%s\n' $(du "$dir" -hab | sort -n -r | tail -1)
命令替换周围缺少引号意味着执行了分词。输出中的第一个字与“文件大小:”在同一行上输出,第二个字在换行符后面打印


我在命令替换中添加了一些关于
$dir
的引号,以防止出现分词和全局扩展问题。作业周围的引号是不必要的(但它们没有坏处,因此如果您愿意,可以将它们留在里面)。

我对您对所需输出的描述有点困惑,因为它与外观不匹配。你能把事情说得更清楚吗?如前所述,你能更新你的问题,使期望的输出和描述匹配吗?另外,如果包含一个从
du“$dir”-hab | sort-n-r | tail-1
I得到一个错误作为无效的零长度文件名的示例,则会很有用。我应该给$(du“$dir”-hab | sort-n-r | tail-1)分配一个变量还是不需要分配一个变量?我不确定是什么输入导致了这种情况。听起来好像
$dir
未定义。如果显示了
du“$dir”-hab | sort-n-r | tail-1的输出
,那么使用awk之类的工具可能更合适。