加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:20:27 所属栏目:安全 来源:网络整理
导读:循环这样的变量时遇到问题.我准备了两个例子来说明问题. EX1: #!/bin/bashDIRS="$@"for DIR in $DIRS; do echo "$DIR"done EX2: #!/bin/bashfor DIR in "$@"; do echo "$DIR"done 第二个示例按预期(和必需)工作.快速测试如下: $ex1 "a b" "c"abc$ex2 "a b
循环这样的变量时遇到问题.我准备了两个例子来说明问题.

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
$

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读