使多个命令出现在同一输出行上

时间:2013-02-15 20:20:10

标签: bash

嗨,我一直遇到麻烦

echo 'Welcome to my first Script'
mkdir myScript
cd myScript
touch doc1 sales.doc.test2.txt outline.doc

echo 'You now have ' ;find . -type f|wc -l;echo 'files in your "myScript" folder'

address="205"
echo -n "Please enter your favourite number:"
read myvar
echo "The number you entered is $myvar"

我正在尝试让输出说“你现在在你的myScript文件夹中有(3)个文件”作为一行,但它仍然在3个单独的行上输出它们。我在这里尝试了3或4个不同的代码(通过点击上面的类似问题)但是它们给了我有趣的错误,这只是我的第一个脚本,所以我理解我正在使用的所有命令(减去文件的计算,我不得不谷歌那个)。

4 个答案:

答案 0 :(得分:7)

echo "You now have $(find . -type f|wc -l ) files in your \"myScript\" folder"

此外,我建议您更改find以包含-maxdepth 1,否则您将会递归......

答案 1 :(得分:3)

它们位于不同的行,因为echowc输出换行符。

解决这个问题的方法是:

echo 'You now have' $(find . -type f | wc -l) 'files in your "myScript" folder'

我们在这里删除了额外的echo换行符,因为我们使用一个echo来统治它们。我们摆脱了wc换行符,因为通过这种替换,wc的输出被分解为单词,并且这些单词作为单独的参数传递给echo;单词分隔符丢失(echo使用空格在输出中分隔其参数)。

答案 2 :(得分:2)

使用no-new-line开关-n并回显find的结果:

echo -n 'You now have ' ; echo -n "`find . -type f|wc -l`"; echo -n ' files in your "myScript" folder'

答案 3 :(得分:0)

使用printf命令:

printf 'You now have %d files in your "myScript" folder' $( find . -type f | wc -l )

(使用嵌入在字符串中的命令替换的其他答案略有不同。)