示例
while [ -n "$1" ]
do
something
done
我可以写$1
而不是"$1"
吗?和之间有什么区别
user=alexander
和user="alexander"
?谢谢
答案 0 :(得分:4)
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var checkMarkButton: UIButton!
let save = "save"
override func viewDidLoad() {
super.viewDidLoad()
if UserDefaults.standard.bool(forKey: "save") == true {
checkMarkButton.setImage(#imageLiteral(resourceName: "greyChecked"), for: .normal)
}else{
checkMarkButton.setImage(#imageLiteral(resourceName: "greyUnchecked"), for: .normal)
}
}
@IBAction func checkMarkAction(_ sender: UIButton) {
UserDefaults.standard.set(true, forKey: "save")
}
}
$ A和“ $ A”之间的区别是在将参数传递给程序和函数方面如何处理断字。
想象一下处理文件的脚本(例如,将它们移动):
$ var="two words"
$ function num_args() { echo "${#}"; }
$ num_args $var
2
$ num_args "$var"
1
$ cat my-move
#! /bin/sh
# my-move
src=${1}
dst=${2}
# ... do some fancy business logic here
mv ${src} ${dst}
按现在的代码显示(无引号),此脚本已损坏,因为它将无法正确处理其中包含空格的文件路径。
(感谢@CharlesDuffy)
在处理全局模式时,另外要引用的内容:
$ my-move "some file" other/path
或者:
$ var='*'
$ num_args "$var"
1
$ num_args $var
60
答案 1 :(得分:1)
引号用作对参数进行分组的一种方法,而不管是否存在空格或其他特殊字符。作为演示,在两种情况下存在实质性差异的情况:
$ foo="bar baz"
$ sh -c 'echo $1' worker $foo
bar
$ sh -c 'echo $1' worker "$foo"
bar baz
在上面的示例中,我们传递了不带引号的$foo
,它传递了bar
作为参数1和baz
作为参数2,但是当我们使用引号传递时,它传递了{{1} }作为参数1。
因此,尽管您可以编写一个不带引号的变量(例如bar baz
),但是通常最好的做法是将其用引号引起来,除非您特别希望将其视为几个独立的参数。