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脚本:
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存在,但我总是"跳过".为什么?
这是我的代码:
#!/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) 我需要打印以下内容 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 但我也需要大写字母.
我试图在一行上做这个,所以最好是相同的循环.
我不想手工输入字母.
我想定义一个变量,它将在每次使用时进行评估.
我的目标是定义两个变量:
A=/home/userA
B=$A/my_file
Run Code Online (Sandbox Code Playgroud)
因此,每当我更新时A,B都会更新新值,A
我知道如何在提示变量中执行此操作,但是,有没有办法为常规变量执行此操作?
测试我的 bash 脚本的同事向我发送了此屏幕截图
他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 安装脚本部分没有找到任何特殊选项。
我收到了很多来自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) 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) GoLand IDE (JetBrains) 如何突出显示fmtGo 标准库包中的格式化动词?
一张图片来澄清我的问题:

如果我编写一个采用格式字符串和多个参数的函数,则格式字符串不会突出显示:
这个突出显示从哪里来?我无法弄清楚这一点。
内部字段分隔符(缩写为 IFS)是指一个变量,它定义用于将模式分隔为某些操作的标记的一个或多个字符。IFS 通常包括空格、制表符和换行符。
显示我当前的 IFS:
echo -n "$IFS" |xxd
00000000: 2009 0a
Run Code Online (Sandbox Code Playgroud)
现在我写了一个简单的 bash 脚本。
整个代码位于我的dropbox 中。
当我将其粘贴到控制台时:
在第 2 行开始到第 5 行,它是\t; 如果我用空白替换它,它可以被复制到控制台并且没有任何反应。
所以我们可以得出结论,这\t导致了这个动作。我想知道,如果变量$1从未被分配过,粘贴到控制台时代码是如何运行的?
我已经IFS多次阅读这个概念,但找不到解释。