【问题标题】:Setting directory as variable in Shell script在Shell脚本中将目录设置为变量
【发布时间】:2018-03-18 10:44:37
【问题描述】:

我要做的是使用 shell 脚本计算目录中的所有文件。

例如在执行程序时,

./test.sh project

它应该计算名为“项目”的文件夹中的所有文件。

但是我在目录部分遇到了问题。

到目前为止,我所做的是,

#!/bin/bash

directory=$1
count=ls $directory | wc -l
echo "$folder has $count files"

但它不起作用...谁能解决我的困惑?

谢谢!

【问题讨论】:

  • 查看$( )(或反引号)做了什么。
  • 这叫做命令替换。如果您使用 bash,您还应该熟悉 进程替换

标签: shell unix ls


【解决方案1】:

设置计数时语法不正确,要在bash 中运行嵌套命令,您需要使用$(..) 的命令替换,它在子shell 中运行命令并返回结果

count=$(ls -- "$directory" | wc -l)

但切勿出于任何目的解析脚本中的ls 输出,请使用更通用的find 命令

find "$1" -maxdepth 1 -type f  | wc -l 

查看更多关于$(..)形成Wiki Bash Hackers - Command substitution的信息

【讨论】:

  • 如果您正在处理名称以 - 开头的目录,那应该是 ls -- "$directory"
  • @melpomene:根据我的更新,我不建议这样做,但仍会进行编辑
  • 非常感谢 Inian,顺便说一句,你能告诉我“$”是什么吗?为什么要在 (ls.....) 前面加上 $?
  • @YooSungKyung:你应该通过我分享的链接
  • 谢谢!当我使用count=$(ls -- "$directory" | wc -l)时,计数的文件是4个,但应该是3个,是否也计算任何隐藏文件?
【解决方案2】:
#!/bin/bash

directory=$1
count=`ls $directory | wc -l`

echo "$folder has $count files"

【讨论】:

    猜你喜欢
    • 2017-07-05
    • 2020-12-05
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多