Bash Unix Shell-了解变量的括号用法
我不熟悉unixshell脚本,我有点困惑在什么情况下必须使用这些类型的括号。 假设Bash Unix Shell-了解变量的括号用法,bash,shell,variables,unix,parentheses,Bash,Shell,Variables,Unix,Parentheses,我不熟悉unixshell脚本,我有点困惑在什么情况下必须使用这些类型的括号。 假设abc是一个由字符串组成的变量。有人能给我举个例子说明如何使用这些括号,以及我应该在什么时候使用它们吗 abc $abc ${abc} $(abc) ($abc)这相当粗糙,但应该是一个良好的开端: abc-可以是变量名的裸字\字符串:abc=123 $abc-对名为abc的变量的引用 ${abc}-字符串安全变量引用文件${abc}\u name.txt $(abc)-运行命令abc,并使用它的stdout代替
abc
是一个由字符串组成的变量。有人能给我举个例子说明如何使用这些括号,以及我应该在什么时候使用它们吗
abc
$abc
${abc}
$(abc)
($abc)
这相当粗糙,但应该是一个良好的开端:
abc
-可以是变量名的裸字\字符串:abc=123
$abc
-对名为abc的变量的引用
${abc}
-字符串安全变量引用文件${abc}\u name.txt
$(abc)
-运行命令abc
,并使用它的stdout代替$(abc)
($abc)
-运行存储在子shell中的命令
假设您处于bash read and.中,
$
字符用于表示将对以下术语执行参数扩展。因此,如果shell读取
abc
它将被解析为命令,shell将尝试并执行该命令
如果贝壳看到
$abc
它将对文本abc
执行参数扩展
,并有效地替换abc的值
${abc}
还将执行参数扩展。当您有这样的表达式时,括号的使用变得非常重要:
${abc}\u sometext
对
$abc\u sometext
在第一个实例中,shell将在abc
上执行参数扩展。在第二个实例中,它将对abc\u sometext
$(
告诉shell执行大括号中的内容并执行命令替换
。在此上下文中,$
不用于参数扩展
。因此,如果shell读取以下内容:
$(abc)
shell将执行abc,它的输出将被替换到位,shell将尝试执行该字符串
(
只是将命令分组并在子shell中执行它们
(abc)
将执行abc
,但与$(abc)
不同,它不会尝试执行命令的任何输出。例如:
$ $(which ls)
Desktop Documents Downloads Mail Manjaro Music Pictures Public Templates Videos bin code tmp
$ (which ls)
/usr/bin/ls
$
看看这个:你错过了一些:
($abc))
,$($abc))
和$($abc))
可能有一些意义,但很少有用。试试看:abc=1+1;($abc));($abc));echo$($abc));echo$($abc))
($abc>($abc)
--在子shell中,在标准通道上运行变量abc
.IO中存储的命令。我不知道“字符串安全”是什么意思--大括号用于消除变量与以下文本“_name”@glennjackman hmm”之间的歧义,实际上我遇到了语法错误…hi='echo hi';echo($hi)
@glennjackman我的意思是安全,因为“file_$abc_name.txt”将尝试查找名为$abc_name
的变量,而不是$abc
@AndrewWhite:($abc)
取决于上下文。arr=($abc)
是数组赋值。($abc)
仅当(
是命令中的第一个单词时才是复合命令(就像{$abc;}
一样,大括号需要更多标点符号,因为它们不是自定界字符。)