之前在做编译脚本的时候,发现一个很奇葩的问题。在shell脚本里面执行的命令,总是失败。手动执行又没有问题。以为是传递的参数出现了问题,把参数打印出来,发现也没有问题。
后面发现是参数导致的。
后面网上百度了一下,发现在执行的命令前面加eval命令,可以解决这个问题。
#!/bin/bash
echo "normal:"
ls "$1"
echo "eval"
eval ls "$1"
运行命令测试:
./test.sh "~/"
执行上面的命令,你会发现没有加eval的会失败。失败的原因如下:
1、参数里面有特殊符号~
2、脚本运行是的参数加了双引号。
因为上面两个原因同时满足,所有导致不加eval的命令执行失败。