Bash在一行上连接两个输出

时间:2018-09-07 03:47:02

标签: bash concatenation computer-science

我正在尝试在一行上打印两个输出:

4 3

但是我得到了:

4
3

这是我的两个命令:

find "$1" -type f | wc -1
find "$1" -type d | wc -1 

我尝试将每个变量分配给一个变量,然后使用echoprintf来组合它们,但是似乎没有任何效果。

3 个答案:

答案 0 :(得分:1)

我无法重现您的问题。

var1=`find "." -type f | wc -l`
var2=`find "." -type d | wc -l`
echo $var1 $var2
8514 93

但是,如果您想替换输入中的任何\n个字符,请执行以下操作- 使用tr替换输入中的任何换行符。

例如,

echo -e "4\n3" 输出

  

4

     

3

echo -e "4\n3" | tr '\n' ' '(用空格替换换行符)

输出

  

4 3

或者,您可以在将值赋给变量之前添加tr '\n' ''(用 代替换行符)。

示例:

var1=`find "$1" -type f | wc -1 | tr '\n' ''`
var2=`find "$1" -type d | wc -1 | tr '\n' ''`

echo "$var1 $var2"

答案 1 :(得分:1)

您应该列出完整的示例以及使用的echo命令。

Roger That的答案应该起作用。

您也可以考虑使用

  • echo -n,例如:

    var1="3"
    var2="4"
    echo -n "$var1"
    echo -n " "
    echo "$var2"
    

    将产生

    3 4
    
  • printf,它可以设置格式,例如:

    var1="3"
    var2="4"
    printf "%d %d\n" $var1 $var2
    

    将输出

    3 4
    

答案 2 :(得分:0)

这是来自许多经验的事情之一。通过查看echoprintf,您走在正确的轨道上。

我将首先使用命令替换,因为这是我想到的第一个方法。我将其与echo结合使用。 (这又是一次体验性的事情。)您可以在许多地方通读有关命令替换的信息,尝试使用Google谷歌搜索或查看问题和答案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_dirdir1的找到目录中包含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社区可以提出很多其他方法来产生相同的输出。在这里列出它们会很有趣。

相关问题