我有以下简单的脚本,我正在运行一个循环,并希望维护一个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) 我正在编写一个非常简单的 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)
我会很感激在这方面提供一些帮助......
我想从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) 我不知道这个运算符$ []并且找不到它的相关信息.但是我知道接下来的两个代码会给出相同的输出
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.