我有一个程序foo
,我为它编写了一个 bash 完成脚本,一切运行正常。我有几十个包装脚本bar1
,bar2
……它只设置一个命令行选项
#/usr/bin/env bash
exec foo --some-option some-value "$@"
我原本希望foo
包装器脚本的补全功能能够发挥作用,但似乎没有。当然,我可以为每个包装器生成补全脚本,但这似乎不够优雅,而且很浪费。是否有一些技巧可以让包装器中的补全可用?
我有一个程序foo
,我为它编写了一个 bash 完成脚本,一切运行正常。我有几十个包装脚本bar1
,bar2
……它只设置一个命令行选项
#/usr/bin/env bash
exec foo --some-option some-value "$@"
我原本希望foo
包装器脚本的补全功能能够发挥作用,但似乎没有。当然,我可以为每个包装器生成补全脚本,但这似乎不够优雅,而且很浪费。是否有一些技巧可以让包装器中的补全可用?
将非常量指针传递给需要常量指针的函数通常不会引发警告(这是有道理的,该函数承诺比调用者期望的“更好”),但将非常量指针指向函数期待 const 指针到指针确实会引发警告(使用gcc -Wall
11.4),我正在努力思考为什么
#include <stdio.h>
int foo(const int *i)
{
return *i;
}
int bar(const int **i)
{
return **i;
}
int main(void)
{
int i = 3, *pi = &i, **ppi = π
printf("foo: %i\n", foo(pi));
printf("bar: %i\n", bar(ppi));
return 0;
}
给予
$ gcc -Wall -o const const.c
const.c: In function ‘main’:
const.c:18:27: warning: passing argument 1 of ‘bar’ from incompatible pointer type [-Wincompatible-pointer-types]
18 | printf("bar: %i\n", bar(ppi));
| ^~~
| |
| int **
const.c:8:21: note: expected ‘const int **’ but argument is of type ‘int **’
8 | int bar(const int **i)
| ~~~~~~~~~~~~^
$ ./const
foo: 3
bar: 3
任何启示为什么?