如何在Bash中操作变量名?

时间:2017-02-04 04:39:44

标签: bash shell

我在Bash中有一个变量名:

var=(any_word)_SuSE_11_design_guides

我想操纵这个名字,以便我可以:

x=$(echo "$var" | some operation)
echo $x
SuSE_11_design_guides

基本上我想在检测到时删除第一个_后面的每个字符。怎么做到这一点?

3 个答案:

答案 0 :(得分:1)

我认为你的意思是保留一切背后的一切 _,这可以通过参数扩展来实现。

string="(anyword)_SuSE_11_design_guides"
printf "%s\n" "${string#*_}"
SuSE_11_design_guides

答案 1 :(得分:1)

目前还不清楚是否要打印SuSE_11_design_guides或之前的任何内容。所以,我会回答这两个问题。

public static double max(List<Double> score) {
    double max = 0;

    for (int i = 0; i < score.size(); i++) {
        if (score.get(i) > max) {
            max = score.get(i);
        }
    }

    return max;
}

public static void main(String[] arg) {
    Scanner scan = new Scanner(System.in);
    List<Double> scores = new ArrayList<>();

    Double score;
    do {
        System.out.print("Enter the scores (-1 to end input) > ");
        score = scan.nextDouble();
        scores.add(score);
    } while (score >= 0);

    System.out.println("Highest score: " + max(scores));
}

如果要打印尾随部分:

# Print the content before the first `_`
echo $var | awk -F_ '{ print $1 }'

答案 2 :(得分:0)

$ var=(any_word)_SuSE_11_design_guides
$ echo ${var##${var%%SuSE_11_design_guides}}
SuSE_11_design_guides

上面的echo语句由两个嵌套的bash字符串函数组成。 打破这一点,它相当于:

let a=${var%%SuSE_11_design_guides}

上面的线条&#34; SuSE_11_design_guides&#34;在$var的尾部返回前缀

${var##$a}

上面从$a的开头开始删除$var中的任何内容(恰好是前一步骤的前缀),留下后缀。

我在原始示例中将它们合并,因为我可以。它肯定会让你更难阅读,但我的目标是震撼价值:-)