相关疑难解决方法(0)

Bash循环中的计数器增量无效

我有以下简单的脚本,我正在运行一个循环,并希望维护一个COUNTER.我无法弄清楚为什么计数器没有更新.这是由于子shell创建了吗?我怎样才能解决这个问题?

#!/bin/bash

WFY_PATH=/var/log/nginx
WFY_FILE=error.log
COUNTER=0
grep 'GET /log_' $WFY_PATH/$WFY_FILE | grep 'upstream timed out' | awk -F ', ' '{print $2,$4,$0}' | awk '{print "http://domain.com"$5"&ip="$2"&date="$7"&time="$8"&end=1"}' | awk -F '&end=1' '{print $1"&end=1"}' |
(
while read WFY_URL
do
    echo $WFY_URL #Some more action
    COUNTER=$((COUNTER+1))
done
)

echo $COUNTER # output = 0
Run Code Online (Sandbox Code Playgroud)

linux bash shell scripting counter

117
推荐指数
9
解决办法
31万
查看次数

为什么 bash 大括号扩展在某些算术表达式中有效,但在其他算术表达式中无效?

我正在编写一个非常简单的 bash 脚本,但我无法理解为什么已弃用的 $[] 可以完美地工作,而 $(()) 似乎破坏了整个事情。

我所指的代码是:

for i in {1..10};
do 
    printf %4d $[{1..10}*i]
    echo
done
Run Code Online (Sandbox Code Playgroud)

在此版本中,我没有遇到任何问题,但我不想使用已弃用的 bash 元素,这就是我想切换到 $(()) 的原因。

不幸的是,一旦我将代码更改为:

printf %4d $(({1..10}*i))
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

./script_bash.sh: line 8: {1..10}*i: syntax error: argument expected (error token is "{1..10}*i")
Run Code Online (Sandbox Code Playgroud)

我会很感激在这方面提供一些帮助......

bash shell arithmetic-expressions brace-expansion

4
推荐指数
1
解决办法
336
查看次数

从NUL分离的输入中填充bash数组

我想从NUL分离的输入(来自stdin)创建一个bash数组.

这是一个例子:

## Let define this for clarity
$ hd() { hexdump -v -e '/1 "%02X "'; echo ;}
$ echo -en "A B\0C\nD\0E\0" | hd
41 20 42 00 43 0A 44 00 45 00
Run Code Online (Sandbox Code Playgroud)

所以这是我的意见.

现在,如果不使用-aof read命令,使用NUL可以正常工作:

$ while read -r -d '' v; do echo -n "$v" | hd; done < <(echo -en "A B\0C\nD\0E\0")
41 20 42 
43 0A 44 
45 
Run Code Online (Sandbox Code Playgroud)

我们得到了正确的价值观.但我无法使用-a以下方法存储这些值:

$ read -r -d '' -a arr < <(echo …
Run Code Online (Sandbox Code Playgroud)

arrays bash stdin nul

2
推荐指数
1
解决办法
136
查看次数

bash中$ [ab]和$((ab))之间的差异

我不知道这个运算符$ []并且找不到它的相关信息.但是我知道接下来的两个代码会给出相同的输出

a=4
b=1
echo $[a-b] # => 3
Run Code Online (Sandbox Code Playgroud)

a=4
b=1
echo $((a-b)) # => 3
Run Code Online (Sandbox Code Playgroud)

那么$ []运算符是什么,与$(())有什么区别?

在我的zsh shell提示符中,当我打开它们中的任何一个并且没有关闭它们时,我写了mathsubst.

math bash operator-keyword

2
推荐指数
1
解决办法
1355
查看次数