我正在写一个shell脚本,其中参数将是一个位置的path。 我正在使用readlink -f命令获取用户发送path的绝对path。 假设用户发送的path有空格,
/home/stack over flow/location
我除了用户发送像报价
"/home/stack over flow/location"
我在这里有两个问题,
1)即使如果path传递引号,当我遍历$ @,引号被抑制,并得到没有引号的path。
u-boot引导程序如何读取/保存其环境variables?
awk中的两个文件数字比较
if [[ $1 = * * ]] ; then temp="$1" fi
在那里我明确地加了引号“,但是现在我面对的问题是即使我用variables添加了空格现在readlink不工作。
full_path=`readlink -f ${temp}`
如果我执行它作为一个正常的shell中的unix命令一样
readlink -f "/home/stack over flow/location"
这是工作,我正在完整的path。 为什么即使我追加空格readlink不工作在shell脚本? 这个你能帮我吗。
Bashvariables赋值奇怪的行为
为什么fork()和printf()的输出比我预测的要多?
什么是国际化和本地化的好介绍和教程?
如何更改进程名称?
什么是套接字选项SO_SNDLOWAT的目的
那么在脚本参数中得到没有引号的路径是有道理的:引号是用来处理脚本调用的shell,而不是脚本本身。 我假设你像这样调用命令:
./test "/home/stack over flow/location"
“测试”是你实现的脚本。 路径周围的引号确保执行此命令的shell将路径视为一个单独的参数,而不是三个单独的字符串,因为它没有引号。 但是引号不被当作参数本身的一部分。 所以当参数交给你的脚本的时候,你会得到一个保存整个路径的单个参数,而不是一个保存修改后字符串的参数:带有引号的字符串。
您可以毫无问题地使用该参数。 只需再次引述:
readlink -f "$@"
将保护指定路径中包含的空白,就像在原来的调用中一样。