我在Bash中有一个变量名:
var=(any_word)_SuSE_11_design_guides
我想操纵这个名字,以便我可以:
x=$(echo "$var" | some operation)
echo $x
SuSE_11_design_guides
基本上我想在检测到时删除第一个_
后面的每个字符。怎么做到这一点?
答案 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
中的任何内容(恰好是前一步骤的前缀),留下后缀。
我在原始示例中将它们合并,因为我可以。它肯定会让你更难阅读,但我的目标是震撼价值:-)