例如,在某些时候,我的代码
var
有时我只是做
upstream() {
push server_shared_shortname
ssh $server_shared -t "cd ~/public_html; git pull -q ~/root.git master"
}
这是一个更具体的例子:
"affiliation": "Example 1, Example 2",
答案 0 :(得分:5)
$var
用于变量扩展:当您希望Bash替换变量的值时,可以使用它。所以,例如,这个:
var=foo
echo "$var"
将变量var
设置为值foo
,然后运行命令echo foo
。
编辑添加一些内容:
$
还有一些其他相关用途;例如,$( ... )
运行命令...
,捕获其输出,并扩展到该输出(减去尾随换行符),$(( ... ))
计算算术表达式...
并扩展其结果:
cat $(echo foo) # equivalent to: cat foo
cat $((2+3)) # equivalent to: cat 5
正如codeforester在下面提到的那样,实际上并不需要$
来扩展“算术表达式”中的变量(其中所有内容都被解释为数字),例如在{{当变量被声明为整数变量时,1}},(( ... ))
,$(( ... ))
,数组索引和变量赋值的右侧。
Bash参考手册,http://www.gnu.org/software/bash/manual/bashref.html,详细且质量上乘。可能需要一些心理调整才能开始考虑Bash的方式,但是值得恕我直言。
答案 1 :(得分:3)
将 分配给变量时,执行 使用$
前缀;例如var=1
declare
,local
和export
的上下文中的赋值。 引用 变量(其值) 使用$
;例如,echo "$var"
作为 异常,有算术上下文,您可以在中 引用变量没有 $
前缀 - 请参阅下文。
如上例所示,您应该通常 双引号 $
- 前缀变量引用(扩展)以防止shell通过其shell expansions对结果值进行不必要的修改,特别是通过空格(分词)将值拆分为多个参数并将值解释为文件名模式(globbing)。 / p>
在以下情况下,必须使用表单${...}
(名称/扩展表达式周围的花括号):
echo "${HOME}grown"
。echo "${HOME%/*}"
会产生类似/home
的内容,其中最短的后缀(%
)匹配模式/*
会从$HOME
的值中删除;换句话说:删除最后一个路径组件。 算术上下文,其中整数[-interpretable]变量通常需要 no $
前缀:
明确的算术上下文:
$(( ... ))
(算术扩展 ;符合POSIX标准的功能)
echo $(( var ))
打印1
,$var
。(( ... ))
(算术表达式 ; Bash扩展名)
(( var )) && echo 'yes'
打印yes
,因为值1
,$var
的值,在概念上被解释为布尔,(概念上)是真的。(( sum = var + var )); echo "$sum"
打印2
[1] 隐式算术上下文(所有这些都是Bash扩展名):
arr=( one two ); ndx=0; echo "${arr[ndx+1]}"
收益two
str='one'; ndx=0; echo "${str:ndx+1}"
收益ne
arr=( one two three ); ndx=0; echo "${arr[@]: 0: ndx + 2 }"
收益one two
[[ ... ]]
内部使用算术运算符:
[[ 1 -eq var ]] && echo 'yes'
收益yes
。declare -i
或local -i
声明的变量的分配,将其标记为整数:
declare -i sum; sum=var; echo "$sum"
收益1
declare -i sum=1; sum+=var; echo "$sum"
收益2
警告:通常情况下,无论是否使用$
前缀在这些上下文中引用变量都无关紧要 - 但存在细微差别;简而言之,在以下情况下仅使用算术上下文中的$
前缀 :
${var:-2}
未设置或为空,则2
默认为$var
。 [1] (( ... ))
有一个较旧的等效文件,过时let
。
(( ... ))
是首选,因为它不需要引用,更容易被识别为与
相关
$(( ... ))
(以及在视觉上更有特色)
将(( sum = var + var ))
与let 'sum = var + var'