shell函数传递带空格的参数

shell中的参数以空格为分割符,经常会碰到需要传递带空格的参数,例如传递带空格的文件名。

方法很简单:给参数加双引号。

但是实际效果要看你的函数内容,一种可能的情况是: 其实你真的传递进去了带空格的参数,但是在函数体内忽略了继续对该变量加引号,导致出现很恼人的错误。

举个例子,遍历文件的一部分

#!/bin/bash

dir="/home/my dir"

func()

{

for elment in $1/*; do

echo "$element"

}

func $dir

上面有两个错误,应该改成

#!/bin/bash

dir="/home"

func()

{

for elment in $1/*; do   ####(2)####for elment in "$1"/*; do   ########确保函数接受进来的参数一直作为一个整体存在!

echo "$element"

}

func $dir   ########(1)#####    func "$dir"   ###确保参数作为一个整体传递进了函数

################### (1)(2)两个错误都需要修改才行。

所以,双引号的作用在这里体现的淋漓尽致,平时我们可能嫌麻烦,对变量的引用不加双引号,这是一种不好的习惯。以后记着写shell时尽量把引用变量用双引号括起来。

上一篇:c#与java之比较(转自Jack.Wang's home)


下一篇:c++(smart pointer)