【问题标题】:Hi everyone! can someone tell me what " if [ $# -ne 1 ]"means in a shell script? [duplicate]大家好!有人能告诉我“if [$# -ne 1]”在 shell 脚本中是什么意思吗? [复制]
【发布时间】:2018-02-22 15:38:07
【问题描述】:

我也一直在尝试找出以下代码行: 如果 [ ! -e $1] 谢谢

【问题讨论】:

  • explainshell.com 是你的朋友。
  • ...另外,我们想要一个不同且不重复的问题。如果此没有作为重复而关闭,它也可能因一次提出多个问题而过于宽泛而关闭。执行这些规则有助于我们建立一个“长尾”数据库,为尽可能多的独特问题提供最佳答案——如果我们对一个同时询问 A+B 的“问题”和第二组答案有不同的答案对于另一个同时询问 A+C 的“问题”,那么只有一个问题 A 的人可以寻求最佳的社区评审答案。

标签: shell unix


【解决方案1】:

让我们分解一下:

  • $# 是剩余参数的数量
  • [test 命令
  • -ne 是数字“不等于”运算符。

所以if [ $# -ne 1 ] 正在测试是否只有一个参数(左)。

在你的第二个例子中:

  • ! 表示没有
  • -e 测试文件是否存在
  • $1 是剩下的第一个参数

因此if [ ! -e $1 ] 测试没有将路径作为第一个(剩余)参数给出的文件或目录。

请注意,如果参数是包含空格或通配元字符的路径名,这可能会失败。需要引用来阻止分词和通配可能破坏路径名;即if [ ! -e "$1" ]

【讨论】:

  • in "$@" 将比in $* 更准确,因为$* 字符串拆分和全局扩展(将"first argument" "second argument" 的参数列表(句法与文字引用)更改为first argument second argument,或"*" 的参数列表到当前目录中的文件列表中)。
  • 同样,这种解释忽略了 [ ! -e $1 ] 中的错误,它将第一个参数拆分为一组单词,将每个这样的单词扩展为一个 glob,并将该 glob 的每个结果作为单独的参数传递到[
  • 我猜是这样......
  • 感谢您的帮助!
猜你喜欢
  • 2021-07-30
  • 2022-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2015-05-29
  • 2011-11-15
  • 1970-01-01
相关资源
最近更新 更多