首页 > 解决方案 > bash 脚本中的 $1 和 "$1" 有什么区别?

问题描述

例子

while [ -n "$1" ]
do
  something
done

我可以写$1而不是"$1"吗?user=alexander和和有什么区别 user="alexander"?谢谢

标签: bash

解决方案


$ var="two words"
$ function num_args() { echo "${#}"; }
$ num_args $var
2
$ num_args "$var"
1

$A 和 "$A" 之间的区别在于如何处理断字,以将参数传递给程序和函数。

想象一下适用于文件的脚本(假设移动它们):

$ cat my-move
#! /bin/sh
# my-move

src=${1}
dst=${2}

# ... do some fancy business logic here

mv ${src} ${dst}
$ my-move "some file" other/path

正如现在的代码(没有引号),这个脚本被破坏了,因为它不能正确处理带有空格的文件路径。

(感谢@CharlesDuffy)

另外在处理 glob 模式时引用问题:

$ var='*'
$ num_args "$var"
1
$ num_args $var
60

或者:

$ shopt -s failglob
$ var='[name]-with-brackets'
$ echo $var
bash: no match: [name]-with-brackets
$ echo "$var"
[name]-with-brackets

推荐阅读