引用并将$ @设置为变量

时间:2016-08-01 07:12:37

标签: bash command-line-arguments quotes

我无法解决如何使用双引号捕获bash脚本中的命令行参数。我有两个文件:hello_worldhello world(注意第二个文件名中的空格)。

当然这有效:

#!/usr/bin/env bash
ls "$@"
$ ./quoted_args.sh hello_world "hello world"
hello world hello_world

但是,以下(非常相似)脚本都不起作用:

脚本A:

#!/usr/bin/env bash
FILES="$@"
ls "$FILES"
$ ./quoted_args.sh hello_world "hello world"
ls: hello_world hello world: No such file or director

脚本B:

#!/usr/bin/env bash
FILES=$@
ls "$FILES"
$ ./quoted_args.sh hello_world "hello world"
ls: hello_world hello world: No such file or director

脚本C:

#!/usr/bin/env bash
FILES="$@"
ls $FILES
$ ./quoted_args.sh hello_world "hello world"
ls: hello: No such file or directory
ls: world: No such file or directory
hello_world

脚本D:

#!/usr/bin/env bash
FILES=$@
ls $FILES
$ ./quoted_args.sh hello_world "hello world"
ls: hello: No such file or directory
ls: world: No such file or directory
hello_world

我觉得我已经尝试过各种方式。我将不胜感激任何帮助或见解!

1 个答案:

答案 0 :(得分:2)

$@存储到数组中,以便能够在其他命令中安全地使用

# populate files array
files=("$@")

# use array
ls "${files[@]}"

# or directly use "$@"
ls "$@"

最好避免在shell脚本中使用所有大写变量名。