gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 09:08:00 25 4
gpt4 key购买 nike

我的 bash 脚本有一个变量 $c,它在 sed 行中被调用,紧跟另一个参数 - 和 bash (实际上相当合乎逻辑)似乎认为其他参数属于变量名,使其无用/空。

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

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

一如既往,我们将不胜感激任何想法。

谢谢,基督徒。

附言。我想要完成的 :) 这是一个 for 循环,步进到 00..50,在循环内需要数字本身,但也需要数字 +1。以防万一有人想知道。

最佳答案

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

pax$ export cq=111

pax$ export c=222

pax$ echo $cq
111

pax$ echo ${c}q
222q

我还应该提一下,如果性能对您来说很重要,您希望尽量减少为完成任务而运行的外部进程(如 bc)的数量。 fork 和执行不是免费的操作,如果您让 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

这个输出:

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'.

您也可以将 next 合并到 for 循环中:

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

关于bash: 变量名后面直接跟其他参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6519224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com