${1+"$@"} 在 unix shell 脚本中是什么意思?
What does ${1+"$@"} mean in a unix shell script?
我在审查一些较旧的 unix shell 脚本时遇到了这个结构,它是什么意思,为什么要使用它?
${1+"$@"}
我从 unix haters 手册的第 152 页(pdf 的第 190 页)找到了这个解释。 http://web.mit.edu/~simsong/www/ugh.pdf
这是准确重现命令行参数的方法
/bin/sh shell 系列 shell 脚本。
它说,“如果至少有一个参数 ( ${1+ ),则代入
所有参数(“$@”)在每个参数中保留所有空格等
参数。
如果我们只使用“$@”,那么它将替换为“”(空参数)
如果没有调用参数,但我们不希望在
那种情况下,不是“”。
为什么不是“$*”等?来自 sh(1) 手册页:
一对双引号(“”)内,参数和
命令替换发生并且 shell 将结果引用到
避免空白解释和文件名生成。如果 $* 是
在一对双引号内,位置参数是
替换和引用,用引用空格分隔(“$1
2 美元……”);但是,如果 $@ 在一对双引号内,则
位置参数被替换和引用,由
未加引号的空格(“$1” “$2” …)。
我认为 ${1+“$@”} 可以一直移植到“第 7 版 Unix”。
哇!一直回到版本 7。
Google应该是你最好的朋友!这是将近 2 年前提出的类似问题。
我在审查一些较旧的 unix shell 脚本时遇到了这个结构,它是什么意思,为什么要使用它?
${1+"$@"}
我从 unix haters 手册的第 152 页(pdf 的第 190 页)找到了这个解释。 http://web.mit.edu/~simsong/www/ugh.pdf
这是准确重现命令行参数的方法 /bin/sh shell 系列 shell 脚本。
它说,“如果至少有一个参数 ( ${1+ ),则代入 所有参数(“$@”)在每个参数中保留所有空格等 参数。
如果我们只使用“$@”,那么它将替换为“”(空参数) 如果没有调用参数,但我们不希望在 那种情况下,不是“”。
为什么不是“$*”等?来自 sh(1) 手册页:
一对双引号(“”)内,参数和 命令替换发生并且 shell 将结果引用到 避免空白解释和文件名生成。如果 $* 是 在一对双引号内,位置参数是 替换和引用,用引用空格分隔(“$1 2 美元……”);但是,如果 $@ 在一对双引号内,则 位置参数被替换和引用,由 未加引号的空格(“$1” “$2” …)。
我认为 ${1+“$@”} 可以一直移植到“第 7 版 Unix”。
哇!一直回到版本 7。
Google应该是你最好的朋友!这是将近 2 年前提出的类似问题。