Skip to content

COMMAND


返回调用程序时使用的命令行参数

语法

declare function Command ( byval index as long = -1 ) as string

用法

result = Command[$]( [ index ] )

参数

index

特定命令行参数的从零开始的索引。

返回值

返回命令行参数(一个或多个)。

说明

Command 返回程序执行时传入的命令行参数。

index 小于零(< 0),则返回所有命令行参数的空格分隔列表;否则返回单个参数。值为零(0)时返回可执行文件名;值为一(1)及以上时分别返回各命令行参数。

index 大于传入参数的数量,则返回空字符串("")。

解析命令行参数时,参数列表中双引号内的内容被视为单个块,返回时不含双引号。

默认情况下,FreeBASIC 所有平台均启用参数的文件名通配符展开(将通配符扩展为文件名)以保持兼容性。命令行中含通配符的参数在无匹配文件或正确引用时通常不会展开。重定向等特殊字符通常也不会被返回,除非正确引用。具体引用方式请参阅所用 shell 的文档。

在命令行参数中使用反斜杠时可能存在一些奇怪的行为,结果甚至可能因平台而异。

  • 警告:由于 FreeBASIC 中构造函数优先级和 main() 初始化的特性,在全局构造函数(模块构造函数或静态/共享对象调用的 UDT 构造函数)中调用 Command 是不安全的(甚至可能引发运行时错误)。

在 Windows 下禁用文件名通配符展开

在源码中某处定义以下全局变量:

vb
'' For MinGW.org and Cygwin runtimes:
Extern _CRT_glob Alias "_CRT_glob" As Long
Dim Shared _CRT_glob As Long = 0

'' For MinGW-w64 runtime:
Extern _dowildcard Alias "_dowildcard" As Long
Dim Shared _dowildcard As Long = 0

在 DOS 下禁用文件名通配符展开

在源码中某处定义以下函数:

vb
Function __crt0_glob_function Alias "__crt0_glob_function" ( ByVal arg As UByte Ptr ) As UByte Ptr Ptr
  Return 0
End Function

在 Linux 下禁用文件名通配符展开

文件名通配符展开由命令 shell 处理。可对含通配符的参数加引号,或在执行命令前在 shell 中禁用通配符展开。例如,在 bash 中使用 set -f 可禁用通配符展开。

示例

vb
Print "program launched via: " & Command(0)

Dim As Long i = 1
Do
    Dim As String arg = Command(i)
    If Len(arg) = 0 Then
        Exit Do
    End If

    Print "command line argument " & i & " = """ & arg & """"
    i += 1
Loop

If i = 1 Then
    Print "(no command line arguments)"
End If

Sleep

方言差异

  • -lang qb 方言中,字符串类型后缀 "$" 是必须的。
  • -lang fblite 方言中,字符串类型后缀 "$" 是可选的。
  • -lang fb 方言中,字符串类型后缀 "$" 被忽略,仅在使用 -w suffix-w pedantic 编译选项时发出警告。

与 QB 的差异

  • QB 不支持数字参数。
  • QB 在返回参数列表前将其转换为大写,FreeBASIC 不进行此转换。
  • 默认情况下,含通配符的参数会被展开(文件名通配符展开)。

另请参阅

  • __FB_ARGC__
  • __FB_ARGV__
  • Exec
  • Run

返回 目录

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系