我不明白的命令输出存在差异,如下所述:
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[@]}原因分别是输出5和1。它不应该类似于命令的输出${#arr}和${#arr[@]}吗?
我有一个简单的脚本如下。
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 行上。我怎样才能获得所需的输出?
我正在尝试编写一个脚本(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) 我正在尝试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)
然后我得到正确的元素数量。这是为什么?
有几个问题可以解决问题,但我想尝试以下方法:
在这个问题中,我基本上将数组作为环境变量,然后尝试将字符串存储到单独的数组元素中。
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"')