bash:变量名后面跟着其他参数?

Chr*_*ian 4 variables bash

我的bash脚本有一个$csed-line中调用的变量,后面紧跟另一个参数 - 而bash(实际上相当合乎逻辑)似乎认为另一个参数属于变量名,使其无用/为空.

(...)
c=$(printf "%02d" $(echo "$i+1"|bc))
sed -n "$cq;d" /var/www/playlisten.txt|cut -c 4-
(...)
Run Code Online (Sandbox Code Playgroud)

第一行设置临时变量,然后将其作为sed参数调用.我需要显示$c在c之后结束的bash 以及变量未命名$cq(当然是空的)...

任何想法都将一如既往地受到高度赞赏.

谢谢,克里斯蒂安

PS.我正在努力实现的目标:)这是一个循环,步骤通过00..50,在循环内数字本身是需要的,但也是数字+1.以防万一有人想知道.

pax*_*blo 8

您需要使用${c}q以防止贪婪的处理(bash尽量使用尽可能多的有效字符):

pax$ export cq=111

pax$ export c=222

pax$ echo $cq
111

pax$ echo ${c}q
222q
Run Code Online (Sandbox Code Playgroud)

我还应该提一下,如果性能对您很重要,您希望尝试最小化bc您运行以执行任务的外部进程数量(例如).分叉和执行不是免费的操作,如果您bash为短期任务完成大部分工作,您的运行速度会更快.

短暂的意思是指在变量中添加一个.显然,如果你想做一个像整个文件一样的工作sed,你最好在专用的外部工具中做到这一点,但是bash提供了相当多的能力来替换昂贵的操作,如i=$(expr $i + 1)i=$(echo "$i+1"|bc).

bash环可以因此与增量进行,并且无需外部进程正在处理其它计算:

#!/bin/bash
for ((count = 0; count < 10; count++)) ; do
    ((next = count + 1))
    echo "count is ${count}, sed string is '${next}q;d'."
done
Run Code Online (Sandbox Code Playgroud)

这输出:

count is 0, sed string is '1q;d'.
count is 1, sed string is '2q;d'.
count is 2, sed string is '3q;d'.
count is 3, sed string is '4q;d'.
count is 4, sed string is '5q;d'.
count is 5, sed string is '6q;d'.
count is 6, sed string is '7q;d'.
count is 7, sed string is '8q;d'.
count is 8, sed string is '9q;d'.
count is 9, sed string is '10q;d'.
Run Code Online (Sandbox Code Playgroud)

您也可以将其合并nextfor循环中:

#!/bin/bash
for ((count = 0, next = 1; count < 10; count++, next++)) ; do
    echo "count is ${count}, sed string is '${next}q;d'."
done
Run Code Online (Sandbox Code Playgroud)