小编典典

无法将所有文本放在同一行以使用 bash 编译程序

all

我在这个脚本中的目标是将所有文本放在同一行以编译 OCaml 文件,但我作为一个新的 bash 用户,不知道该怎么做。任何人都可以帮忙吗?

#!/bin/bash

function argv {
  ocamlopt -o
  for (( i=0; i < $#; i++ )) 
  do 
    "${BASH_ARGV[i]}"
  done
}

argv "$@"

执行时出错:

option '-o' needs
an argument.
Usage: ocamlopt <options> <files>
Try 'ocamlopt --help' for more information.
./comp.sh: line 7: teste.sh: command not found
./comp.sh: line 7: teste: command not found

阅读 87

收藏
2022-09-02

共1个答案

小编典典

dodone应该出现您希望 bash 为您执行的命令。但是您正在那里为先前的命令生成参数。正如你所看到的,那是行不通的。

您也不需要生成参数列表。正如@JohnBollinger 和@Shawn 指出的那样,它已经以“$@”的名义存在。

由于您的argv函数使用BASH_ARGV,它从命令行获取原始参数。换句话说,它忽略了传递给它的参数。假设您希望它改为查看其参数。

我们还假设这只是您想要做的更复杂的事情的一个例子。

那么,生成一系列单独的任意参数(如果它们可以包含空格或类似参数)实际上非常困难。如果您愿意假设参数都表现良好(没有空格等),您可以像这样构建一个参数字符串:

#!/bin/bash

function argv {
  MY_ARGS=''
  for MY_ARG in $*; do
    MY_ARGS="$MY_ARGS $MY_ARG"
  done
  ocamlopt -o $MY_ARGS
}

argv "$@"
2022-09-02