linux - a=( 一二三 ) -- 为什么 for x in $a 只在 "one"上循环?

标签 linux bash

我有这个脚本:

#!/bin/bash
if [ -z "$1" ]; then
    echo "usage: ./test.sh [one|two|three|four|five]"
    exit
elif [ $# -eq 1 -a $1 = "all" ]; then
    params=("one" "two" "three" "four" "five")
else
    params=$@
fi

echo "=========="

for param in $params
do
    if [ $param = "one" ]; then
        echo "one"
    elif [ $param = "two" ]; then
        echo "two"
    elif [ $param = "three" ]; then
        echo "three"
    elif [ $param = "four" ]; then
        echo "four"
    elif [ $param = "five" ]; then
        echo "five"
    fi
    echo "=========="
done

如果我尝试./test.sh one./test.sh Two ecc它可以工作,但是当我尝试./test.sh all它不起作用并且只打印一个。

问题出在哪里??? 谢谢 达里奥

最佳答案

for param in $params

...是扩展数组的错误方法。相反,使用:

params=( "$@" )
for param in "${params[@]}"
<小时/>

要解释为什么数组语法更好,请考虑以下因素:

params=( "first item" "second item" "third item" )
for param in "${params[@]}"; do
  echo "$param"
done

...你不能使用字符串语法来做到这一点(将单词放在一起)。

关于linux - a=( 一二三 ) -- 为什么 for x in $a 只在 "one"上循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38311349/

相关文章:

bash 条件扩展如 C 中一样

bash - 查找并删除具有相同前缀但不同扩展名的文件(即 *.flac 和 *.mp3)

c - 在C中查找 "double free or corruption (out):"的原因

linux - 我可以在运行时限制 CGI 脚本中允许我访问的文件夹吗?

java - 如何在hadoop中配置hdfs

bash - 如何将终端回滚到上次发出命令的位置?

objective-c - 当前目录路径和 NSTask

linux - 我应该为此编写设备驱动程序吗?

c++ - Arduino 的替代 IDE

bash 如果字符串不包含多个条目