1

ソース コードの依存関係ファイルを取得するための短い bash スクリプトがあります。

#!/bin/sh
rule=$(cpp -P -w -undef -nostdinc -C -M file.cc)
rule=${rule##*:}
#echo $rule
echo ${rule//\\}

残念ながら、それは出力します./findDep.sh: 5: ./findDep.sh: Bad substitution。しかし、コメントを外すecho $ruleと、スクリプトは問題なく実行されます。

lib.h macro.inc fundamental.h lib/fs.h lib/net.h \ lib/net/fetch.h
lib.h macro.inc fundamental.h lib/fs.h lib/net.h  lib/net/fetch.h

理由を知っている人はいますか?

前もって感謝します。

4

2 に答える 2

5

またはに変更#!/bin/shする必要があります。#!/bin/bash#!/usr/bin/env bash

于 2012-07-11T06:17:29.680 に答える
3

Bash 4.2.29 では、ここで問題を再現できません。

しかし、 がデフォルトで改行継続でread行を結合することをご存知でしたか?\

read rule < <(cpp -P -w -undef -nostdinc -C -M file.cc)
echo "${rule##*:}"

または、よりsh互換性のある方法で(私は思う)、

cpp -P -w -undef -nostdinc -C -M file.cc | {
    read rule
    echo "${rule##*:}"
}
于 2012-07-11T06:23:28.077 に答える