0

我试图让以下脚本工作,但我遇到了一些问题:

g++ -g -c $1
DWARF=echo $1 | sed -e `s/(^.+)\.cpp$/\1/`

我得到 -

./dcompile: line 3: test3.cpp: command not found
./dcompile: command substitution: line 3: syntax error near unexpected token `^.+'
./dcompile: command substitution: line 3: `s/(^.+)\.cpp$/\1/'
sed: option requires an argument -- 'e'

然后一堆关于 sed 使用的东西。我想要做的是传入一个cpp文件,然后提取没有.cpp的文件名并将其放入变量DWARF中。我还想稍后使用变量 DWARF 执行以下操作 -

readelf --debug-dump=info $DWARF+".o" > $DWARF+".txt"

但我不确定如何实际进行字符串连接,所以请帮助解决这两个问题。

4

3 回答 3

2

您实际上需要执行命令:

DWARF=$(echo $1 | sed -e 's/(^.+)\.cpp$/\1/')

错误消息是 shell 错误,因为您的原始语句

DWARF=echo $1 | sed -e `s/(^.+)\.cpp$/\1/`

实际上是这样解析的

run s/(^.+)\.cpp$/\1/
set DWARF=echo
run the command $1 | ...

因此,当它说test3.cpp: command not found我假设您正在使用参数运行时test3.cpp,它实际上是在尝试执行该文件

您还需要将 sed 脚本用单引号括起来,而不是反引号

于 2013-06-25T19:12:20.690 回答
1

在 BASH 中,您可以从 $1 裁剪扩展

${1%*.cpp}

如果您需要设置 DWARF var 使用

DWARF="${1%*.cpp}"

或仅将 $1 引用为

readelf --debug-dump=info "${1%*.cpp}.o" > "${1%*.cpp}.txt"

这将切断最右边的 .cpp 所以 test.cpp.cpp 将是 test.cpp

于 2013-06-25T19:20:34.533 回答
0

您可以awk为此使用:

$ var="testing.cpp"
$ DWARF=$(awk -F. '{print $1}' <<< $var)
$ echo "$DWARF"
testing
于 2013-06-25T19:10:05.433 回答