这是来自大量经验的事情之一。通过查看 echo 和 printf,您走在了正确的轨道上。
我将从使用命令替换开始,因为这是我想到的第一个方法。我会将它与echo 结合起来。 (又是那种体验。)您可以在很多地方阅读有关命令替换的信息,尝试谷歌搜索或查看问题和答案here。
我们的目标可以表述为执行以下步骤:
#Not real code
$ echo "<number_of_files> <number_of_directories>"
命令替换只允许我们使用命令的输出给我们<number_of_files> 和<number_of_directories>。为了得到这些输出,我们使用模式$(my_command),它会给出运行的任何输出
$ my_command
在终端给出。希望当您到达我标记的部分时,这会变得更清楚,“我们在这里进行命令替换”,加粗。
我会想象你有一个类似下面的目录结构。 (我称它为no_stack_dir,因为您不希望您的数字一个一个堆叠在一起。)
no_stack_dir/
├── dir1
├── dir2
├── file1
├── file2
├── file3
└── file4
我将通过不创建脚本来简化事情。我不使用"$1",而是使用目录名——在本例中为/home/jsmith147/no_stack_dir。在我展示方法之前,我希望通过使用以下命令来确保我们的目录设置被理解。
$ cd ~
$ pwd
/home/jsmith147
$ls
no_stack_dir
$ls no_stack_dir
dir1 file2
dir2 file3
file1 file4
注意我只有 2 个子目录,因为我们的 find 命令将在找到的目录中包含 no_stack_dir 以及 dir1 和 dir2。
这里我们做命令替换,结合echo。
我们的<number_of_files>来自命令,
find /home/jsmith147/no_stack_dir -type f | wc -l
而我们的<number_of_directories>来自命令,
find /home/jsmith147/no_stack_dir -type d | wc -l
请注意,我没有将终端提示符 $ 放在这些命令之前。这就是命令替换的用武之地。我们从
#Not real code
$ echo "<number_of_files> <number_of_directories>"
到
#Real code
$ echo "$(find /home/jsmith147/no_stack_dir -type f | wc -l) $(find /home/jsmith147/no_stack_dir -type d | wc -l)"
我希望我已经通过这些示例说得足够清楚,这样您就可以编写一个脚本(或其他使用 "$1" 的东西)来运行类似
$ ./no_stack.sh /home/jsmith147/no_stack_dir
随时提问。还有许多其他方法可以完成您正在尝试做的事情。也许 SO 社区可以想出许多其他方法来产生相同的输出。在这里列出它们会很有趣。