相关疑难解决方法(0)

为什么使用 shell 循环处理文本被认为是不好的做法?

在 POSIX shell 中使用while 循环来处理文本通常被认为是不好的做法吗?

正如Stéphane Chazelas 所指出的,不使用 shell 循环的一些原因是概念可靠性易读性性能安全性

这个答案解释了可靠性易读性方面:

while IFS= read -r line <&3; do
  printf '%s\n' "$line"
done 3< "$InputFile"
Run Code Online (Sandbox Code Playgroud)

为了性能,从文件或管道读取时,while循环和读取非常慢,因为内置read shell一次读取一个字符。

怎么样的概念安全性方面?

shell text-processing

241
推荐指数
4
解决办法
5万
查看次数

运行脚本的最快方法是什么?

我想知道运行脚本的最快方法是什么,我一直在读到在终端上显示脚本的输出与将其重定向到文件或/dev/null.

因此,如果输出不重要,那么让脚本更快地工作的最快方法是什么,即使它是 minim 。

bash ./myscript.sh 
-or-
bash ./myscript.sh > myfile.log
-or-
bash ./myscript.sh > /dev/null
Run Code Online (Sandbox Code Playgroud)

linux bash

21
推荐指数
2
解决办法
6214
查看次数

How do I shift a bash array at some index in the middle?

1  #!/bin/bash
2  # query2.sh
3
4  numbers=(53 8 12 9 784 69 8 7 1)
5  i=4
6
7  echo ${numbers[@]} # <--- this echoes "53 8 12 9 784 69 8 7 1" to stdout.
8  echo ${numbers[i]} # <--- this echoes "784" to stdout.
9
10 unset numbers[i]
11
12 echo ${numbers[@]} # <--- this echoes "53 8 12 9 69 8 7 1" to stdout.
13 echo ${numbers[i]} # <--- stdout is blank.
Run Code Online (Sandbox Code Playgroud)

Why, in line …

bash array variable

15
推荐指数
2
解决办法
5493
查看次数

使用子shell的开销是多少?

希望这个问题不是太笼统。我对 shell 脚本很陌生,我来自计算机体系结构/非脚本编程背景。我在我工作的脚本中注意到,很少通过围绕整个脚本创建子 shell 来编写脚本。在我正在编写的脚本中,当我可以用一个子 shell 包围它时,我就是这样,因为它可以防止它与调用我的其他脚本混淆(以防万一)。由于与此方法相关的一些开销,这不是一种常见做法吗?我很难在网上找到这个。

例子:

#!/bin/bash
( #Start of subshell
echo "Some stuff here"
) #End of subshell
Run Code Online (Sandbox Code Playgroud)

linux performance bash fedora subshell

8
推荐指数
1
解决办法
2356
查看次数

Bash脚本继承?从另一个脚本调用函数?

我有这一行:

trap 'jobs -p | xargs kill -9' SIGINT SIGTERM EXIT

它在我拥有的许多 bash shell 脚本中重复出现。

共享此代码的最佳方式是什么?我可以调用 bash 函数吗?

实际上,我正在创建一个框架,并且用户将需要编写一些粘合 shell 脚本。如果用户的 shell 脚本能够以某种方式从基本 shell 脚本继承,那就太好了。或者他们可以以某种方式调用预先存在的 bash 函数。

问题是,如果我创建一个像这样的 bash 函数

// a.sh
function trap_and_kill_child_jobs {
    trap 'jobs -p | xargs kill -9' SIGINT SIGTERM EXIT
}
Run Code Online (Sandbox Code Playgroud)

并从另一个脚本中调用它,如下所示:

// b.sh
source ./a.sh
trap_and_kill_child_jobs
sh -c 'sleep 10000 &' &   # I want this process to be killed by `trap_and_kill_child_jobs`
./run-some-tests.js
Run Code Online (Sandbox Code Playgroud)

调用者脚本 ( b.sh)实际上并没有遇到陷阱。b.sh 创建的“子作业”将继续运行。

bash shell-script

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

我可以使用比较运算符吗?

我正在构建一个函数,该函数将计算给定安培数、距离(以英尺为单位)和允许电压降所需的电线规格。

给定这些值,我可以计算出“圆形密耳”,从而得到AWG 要求。我开始构建一个大型if elif声明来将圆形密耳与其受人尊敬的仪表进行比较,但我相信这case是正确的工具。

我还没有找到任何用于比较数字的案例示例,所以我想知道是否可以执行以下操作:

what.gauge () {

    let cmils=11*2*$1*$2/$3
    let amils=17*2*$1*$2/$3


    case $cmils in

        320-403)
            cawg="25 AWG"
            ;;
        404-509)
            cawg="24 AWG"
            ;;
        510-641)
            cawg="23 AWG"
            ;;

        etc...

}
Run Code Online (Sandbox Code Playgroud)

bash case

4
推荐指数
3
解决办法
3451
查看次数

bash:为数组预分配内存

可以bash为定义大小的数组预先分配内存吗?我declare -a arr在循环 ( arr+=("$str")) 中迭代地将字符串添加到数组(由 声明),并且想知道是否可以通过预分配适当大小的内存(例如,包含不大于 512 个字符的字符串的 10,000 个元素)来提高性能。

performance bash memory array

3
推荐指数
1
解决办法
1150
查看次数

在 shell 脚本中将字符串分解为数组

我正在尝试将字符串转换为string=11111001数组,我可以通过调用相应的数组索引来访问它

arr[0]=1, arr[1]=0
Run Code Online (Sandbox Code Playgroud)

我是 shell 脚本的新手,从我读到的内容来看,它没有我被卡住的分隔符。

有人能帮我吗?

shell-script text-processing

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