本文主要是介绍shell 间接变量引用的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
当要引用一个变量的值时,一般推荐使用双引号。使用双引号除了变量名[2]前缀($)、后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符。[3] 用双引号时$仍被当成特殊字符,允许引用一个被双引号引起的变量("$variable"), 那也是说$variable会被它的值所代替。
用双引号还能使句子不被分割开. [4] 一个参数用双引号引起来能使它被看做一个单元,这样即使参数里面包含有空白字符也不会被shell分割开了。
单引号(' ')和双引号类似,但它不允许解释变量引用,因此,在单引号内的字符$的特殊意思无效了。在单引号内,除了字符',每个特殊字符都只是字面的意思。单引号(全局引用)比双引号(部分引用)更严格的处理引用部分。
感叹号(!)称之为事件指示器 (event designator) ,用以对.bash_history中的某个命令行条目的引用。
!! 引用上一条命令。这是 `!-1' 的同义词。
!string
引用最近的以 string 开始的命令。
!?string[?]
引用最近的包含 string 的命令。尾部的 ? 可以被忽略,如果 string 之后紧接着一个新行符。
在命令行上,把感叹号"!"放在双引号里执行命令会出错(译者注:比如说:echo "hello!"). 因为感叹号被解释成了一个历史命令. 然而在一个脚本文件里,这么写则是正确的,因为在脚本文件里Bash的历史机制被禁用了。
root@test-desktop:/home/James/mypro/Linux-Pro/Network# !!
ls
hostname_to_ip hostname_to_ip.c hostname_to_ip.c~ ip_to_hostname ip_to_hostname.c ip_to_hostname.c~ Makefile Makefile~
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$CLASSPATH"
.:/lib:/opt/jdk1.5.0_22/jre/lib:
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo '$CLASSPATH'
$CLASSPATH
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$(ls)"
hostname_to_ip
hostname_to_ip.c
hostname_to_ip.c~
ip_to_hostname
ip_to_hostname.c
ip_to_hostname.c~
Makefile
Makefile~
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo '$(ls)'
$(ls)
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "!"
-bash: !: event not found
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo '!'
!
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo !
!
root@test-desktop:/home/James/mypro/Linux-Pro/Network# ls
hostname_to_ip hostname_to_ip.c hostname_to_ip.c~ ip_to_hostname ip_to_hostname.c ip_to_hostname.c~ Makefile Makefile~
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "!"
-bash: !: event not found
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "!!"
echo "ls"
ls
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$(!!)"
echo "$(echo "ls")"
ls
root@test-desktop:/home/James/mypro/Linux-Pro/Network# ls
hostname_to_ip hostname_to_ip.c hostname_to_ip.c~ ip_to_hostname ip_to_hostname.c ip_to_hostname.c~ Makefile Makefile~
root@test-desktop:/home/James/mypro/Linux-Pro/Network# echo "$(!!)"
echo "$(ls)"
hostname_to_ip
hostname_to_ip.c
hostname_to_ip.c~
ip_to_hostname
ip_to_hostname.c
ip_to_hostname.c~
Makefile
Makefile~
root@test-desktop:/home/James/mypro/Linux-Pro/Network#
原文地址:http://blog.csdn.net/hepeng597/article/details/8057692
这篇关于shell 间接变量引用的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!