【问题标题】:Difference between braces {} and brackets () in shell scriptingshell脚本中大括号{}和方括号()的区别
【发布时间】:2015-05-07 16:27:43
【问题描述】:

我们使用大括号{} 表示变量表达式,例如

NAME="test"

FILE_NAME=${NAME}file

但我不明白我们在哪些场景中使用括号() 假设 nslookup $(hostname) 仅适用于 () 括号。

谁能解释一下?

【问题讨论】:

  • 在美国英语中,这些:() 是括号,这些:[] 是括号。

标签: shell brackets braces


【解决方案1】:

先挑剔:

  • 括号[]
  • 括号()
  • 大括号{}
  • (双)引号""
  • (单)引号(撇号)''
  • 反引号 ``(与波浪号 ~ 键相同)

大括号在 BAsh 脚本中用于复杂的变量扩展。考虑字符串连接:

STR="hello"
STR2=$STR

STR2 计算结果为“你好”。如果你想让它像“helloWorld”一样。像STR2="$STR2World" 这样的操作是行不通的,所以你使用大括号,即:STR2="${STR}World"

至于括号,它们被使用,类似于反引号`,它将它们之间的文本扩展为命令的文本输出。

如果您想将当前时间存储为字符串怎么办?

STR2=$(date)

现在STR2 存储字符串“Thu May 7 09:32:06 PDT 2015”。

Additionally, you can use parentheses to execute something in a subshell, 这可能会影响您的环境、PID 等。对于您想要一个“一次性”环境且必须通过 pushd/popd 而不是 @ 来跟踪/恢复环境变量、目录的情况非常有用987654337@等

【讨论】:

  • 我相信这些()在英国英语中通常被称为“括号”。
  • @KeithThompson 根据我的发现,您似乎是正确的。括号被称为方括号,或者更明确地说,“圆括号”,而[] 在英国英语中总是被明确称为“方括号”。 separatedbyacommonlanguage.blogspot.ca/2006/08/…
  • 如果您要挑剔,那么反引号与所有键盘布局上的波浪键不同。并非每个程序员都使用英文键盘,因为许多国家/地区都有自己的标准。
  • 实际上不是,因为英语是一种国际语言。每种基于拉丁语的语言(据我所知)都可以输入英语而无需更换键盘。
  • 我发现将${foo} 视为扩展参数的规范 方式更容易一些,而$foo 是一个特殊情况的示例,其中大括号可以删除它,这样做不会产生歧义。
【解决方案2】:

使用括号 ( 执行某些操作。恰好有一个名为 hostname 的程序 - 所以 $(hostname) 会执行它。

尝试which hostname 看看该程序驻留在哪里

【讨论】:

    猜你喜欢
    • 2019-02-22
    • 2022-11-19
    • 1970-01-01
    • 2012-11-12
    • 2012-09-27
    • 1970-01-01
    • 2014-04-18
    • 2016-06-26
    相关资源
    最近更新 更多