标签: array

位置参数扩展和自定义数组扩展的不同结果

我不明白的命令输出存在差异,如下所述:

INPUT="$@"
echo "$INPUT ${#INPUT} ${#INPUT[@]} ${#@}"
# outputs: a b c 5 1 3

arr=(a b c)
echo "$arr ${#arr} ${#arr[@]}"
# outputs: a 1 3
Run Code Online (Sandbox Code Playgroud)

我用./my_script.sh a b c.

我知道这echo "$arr" 是取消引用$arr第一个元素,然后打印a. 同时对于$INPUT它打印的命令a b c

对于命令${#INPUT}${#INPUT[@]}原因分别是输出51。它不应该类似于命令的输出${#arr}${#arr[@]}吗?

bash array shell-script

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

在 bash 数组中操作多个字串

我有一个简单的脚本如下。

names=("windows" "ubuntu" "raspbian" "debian" "kali linux")
echo "names array length: ${#names[@]}"

for n in ${names[@]}; do
    echo $n
done
Run Code Online (Sandbox Code Playgroud)

我的意图和希望是:

names array length: 5
windows
ubuntu
raspbian
debian
kali linux
Run Code Online (Sandbox Code Playgroud)

但我得到的结果是:

names array length: 5
windows
ubuntu
raspbian
debian
kali
linux
Run Code Online (Sandbox Code Playgroud)

该数组似乎具有正确的条目数,但打印输出出现在 6 行而不是 5 行上。我怎样才能获得所需的输出?

bash array

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

数学运算 - Bash 脚本

我正在尝试编写一个脚本(script1.sh),它给出第一个数字中每个数字的总和,提高到第二个数字的幂。所以

./script1.sh 12345 2

应该输出 55

(因为 1+4+9+16+25=55)

或者 ./script1.sh 3706907995955475988644381 25

应该输出3706907995955475988644381.

我写了一个脚本,但在某些情况下,我得到了一个负面的输出,我不知道这是怎么发生的。

例如

./script1.sh 3706907995955475988644380 25

产出

-2119144605827694052

我的脚本:

#!/bin/bash
sum=0

value=$1

arr=()
for ((i = 0; i < ${#value}; i++)); do
    arr+=(${value:$i:1})
done

for x in "${arr[@]}"; do
    sum=$(($sum+(x**$2)))
done
echo $sum
Run Code Online (Sandbox Code Playgroud)

bash array shell-script for

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

为什么zsh中IFS需要echo才能生效?

我正在尝试PATH使用 zsh 5.8 将 的成员读入数组。我习惯使用 Bash,通常可以执行以下操作:

IFS=: p=($PATH)
Run Code Online (Sandbox Code Playgroud)

然而,对于 zsh,这实际上给了我一个只有一项的数组。如果我改写:

IFS=: p=($(echo $PATH))
Run Code Online (Sandbox Code Playgroud)

然后我得到正确的元素数量。这是为什么?

zsh array echo

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

将数组作为环境变量存储到非交互式 shell

有几个问题可以解决问题,但我想尝试以下方法:

在这个问题中,我基本上将数组作为环境变量,然后尝试将字符串存储到单独的数组元素中。

a=('Apple Tomato' 'Banana Carrot') bash -c \
'b=($(echo "${a}")); echo -e "${b[0]}\n"; echo "${b[1]}";'
Run Code Online (Sandbox Code Playgroud)

输出

(Apple

Tomato
Run Code Online (Sandbox Code Playgroud)

期望输出:

苹果番茄

香蕉胡萝卜

一个观察:

此外,如果原始数组在单引号数组元素内有双引号,是否会保留引号。例如:a=('Apple "Tomato"' 'Banana "Carrot"')

shell bash array

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

标签 统计

array ×5

bash ×4

shell-script ×2

echo ×1

for ×1

shell ×1

zsh ×1