我必须编译一些mysql c api代码并厌倦了在命令行中编写所有这些:
gcc main.c -o main `mysql_config --cflags --libs`
我在bash中编写了一个shell脚本,并在bash中传递位置参数:
gcc $1 -o ${"$1":0:2} 'mysql_config --cflags --libs'
但这不起作用。我收到错误消息:./compile: line 2: ${"$1":0:-2}: bad substitution
。有人可以告诉我我做错了吗?
我使用它的唯一方法是分配一个新变量:
filename=$1;
gcc $filename -o ${filename:0:-2} `mysql_config --cflags --libs`
这是唯一的方法吗?还是有办法解决我在第一种情况下做错的事情?
答案 0 :(得分:3)
你几乎拥有它:
${1:0:2}
您不需要在括号内另外引用$1
,因为其中的所有内容都将被解释为变量的名称,如${filename:0:-2}
的情况。
答案 1 :(得分:1)
在回答问题的评论时,以下是针对这种情况的示例makefile
:
MSQL_FLAGS := $(shell mysql_config --cflags)
MSQL_LIBS := $(shell mysql_config --libs)
main : main.c
gcc $(MSQL_FLAGS) -o $@ $< $(MSQL_LIBS)