为了完成我的任务,我需要显示 shell 文件中的当前行数,下面我wc -l
在程序中实现了命令,但我的 shell 并没有显示行数,而是回显了实际的命令和文件名。我该如何克服这个问题?
echo "Hello my name is: Roosevelt Mendieta"
echo "My user name is: $USER"
echo "Todays date and time is: `date`"
echo "This file has: " wc -l mendietaRPgm4.sh "lines of code"
read -p "Please enter any number " number
TIME=2
echo "Your number $number * 2 = $(($number * $TIME))"
答案1
echo "This file has: " wc -l mendietaRPgm4.sh "lines of code"
这是echo
带有 5 个字符串作为参数的命令(由于使用了双引号,因此参数为 5)。您需要使用$(...)
命令替换 - 里面的任何命令都将运行,并且其输出将替换$(...)
。
echo "This file has: " $( wc -l mendietaRPgm4.sh ) "lines of code"
这更接近,但并不理想,因为wc -l file.txt
会输出文件名。例如
$ wc -l /etc/passwd
47 /etc/passwd
现在,如果将文件重定向到wc
命令的标准输入,它将不会输出文件名(因为stdin
从技术上讲没有文件名)。
echo "This file has: " $( wc -l < mendietaRPgm4.sh ) "lines of code"
现在这很合适。为了加分,我建议阅读bash 手册找出可以使用哪些变量来引用脚本本身。因为目前,您的脚本旨在将脚本名称硬编码在其本身中,这既不灵活也不实用。一旦重命名脚本,命令就会产生错误。但这对读者来说是一项额外的练习。