变函数bash中的特殊字符

时间:2015-05-07 12:47:56

标签: bash

我在下面调用了一个函数,它接受一个变量" name" (来自class DB{ public static function connect($engine,$host,$user,$pass,$name){ try{ $dbh = new PDO("$engine:host=$host;dbname=$name;charset=utf8",$user,$pass); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES,false); return $dbh; } catch(PDOException $e){ echo $e->getMessage(); } } } 的文件路径)

然后我想使用文件路径来运行一些检查,但是find正在拾取包含find的临时文件。

所以现在当尝试使用函数中的第一个参数时,字符串会在$截断。

所以

$

回复为

File=/root/fed/~$reader.txt

使用''是流行的答案,不知道如何在这里申请

代码是:

/root/fed/eager.txt

1 个答案:

答案 0 :(得分:2)

您需要使用单引号来阻止Bash扩展$reader中的name

这是一个简单使用echo的演示:

之前

bash-4.3$ find . -type f -print0 | xargs -0 -I name bash -c 'echo "name"' 
./~.txt

bash-4.3$ find . -type f -print0 | xargs -0 -I name bash -c "echo 'name'"
./~$reader.txt

您不需要更改fnchash()

所以,用:

fnchash () {
    echo "$1"
}

您应该可以致电:

find / -type f -print0 | xargs -0 -I name bash -c "fnchash 'name'" 

获得您想要的结果:

bash-4.3$ ls -laF
total 0
drwxr-xr-x   3 paj  staff   102  7 May 22:57 ./
drwxr-xr-x  55 paj  staff  1870  7 May 22:57 ../
-rw-r--r--   1 paj  staff     0  7 May 22:57 ~$reader.txt

bash-4.3$ find . -type f -print0 | xargs -0 -I name bash -c "fnchash 'name'"
./~$reader.txt