Bash – 在变量中保存$@时是空间安全的

前端之家收集整理的这篇文章主要介绍了Bash – 在变量中保存$@时是空间安全的前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
循环这样的变量时遇到问题.我准备了两个例子来说明问题.

EX1:

#!/bin/bash
DIRS="$@"

for DIR in $DIRS; do
    echo "$DIR"
done

EX2:

#!/bin/bash
for DIR in "$@"; do
    echo "$DIR"
done

第二个示例按预期(和必需)工作.快速测试如下:

$ex1 "a b" "c"
a
b
c
$ex2 "a b" "c"
a b
c

原因,我为什么要使用第一种方法是因为我希望能够将多个目录传递给程序,或者没有使用当前目录.像这样:

[ $# -eq 0 ] && DIRS=`pwd` || DIRS="$@"

那么,我如何让例1保持空间安全?

使用数组而不是简单变量.
declare -a DIRS

DIRS=("$@")

for d in "${DIRS[@]}"
do echo "$d"
done

这会产生结果:

$bash xx.sh a "b c" "d e f    g" h z
a
b c
d e f    g
h
z
$

猜你在找的Bash相关文章