我在这个脚本中的目标是将所有文本放在同一行以编译 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
do…done应该出现您希望 bash 为您执行的命令。但是您正在那里为先前的命令生成参数。正如你所看到的,那是行不通的。
do
done
您也不需要生成参数列表。正如@JohnBollinger 和@Shawn 指出的那样,它已经以“$@”的名义存在。
由于您的argv函数使用BASH_ARGV,它从命令行获取原始参数。换句话说,它忽略了传递给它的参数。假设您希望它改为查看其参数。
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 "$@"