我正在编写一个shell脚本,其中parameter将是一个位置的路径。我使用readlink -f命令获取用户发送的路径的绝对路径。假设用户发送的路径是否有空格,如
/home/stack over flow/location
我发送的用户除了
之类的引号外 "/home/stack over flow/location"
我这里有2个问题,
1)即使路径是用引号传递的,当我迭代$ @时,引号被抑制并获得没有引号的路径。
2)我做了一个工作来检查参数是否包含空格,并且我明确地添加了
if [[ $1 = *\ * ]] ; then
temp=\"$1\"
fi
我明确地添加了引号,但我现在面临的问题是即使我添加了带空格的变量,现在readlink也无效。 当我做的时候
full_path=`readlink -f ${temp}`
它的说法 用法:readlink [-n] [-f]符号链接
如果我在shell中执行它作为普通的unix命令,如
readlink -f "/home/stack over flow/location"
这是有效的,我正在获得完整的路径。为什么即使我追加空格readlink也无法在shell脚本中工作?请帮帮我。
答案 0 :(得分:5)
在脚本参数中获取没有引号的路径是有道理的:引号用于处理脚本的调用的shell,而不是脚本本身。 我假设你这样命令:
./test "/home/stack over flow/location"
其中'测试'是您实现的脚本。路径周围的引号确保执行此命令的shell将路径视为单个参数,而不是将三个单独的字符串视为没有引号的情况。但引号不被视为参数本身的一部分。因此,当参数移交给您的脚本时,您将获得一个保存整个路径的参数,而不是基于路径保存修改后的字符串的参数:带填充引号的字符串。
您可以毫无问题地使用该参数。只需再次引用它:
readlink -f "$@"
将保护指定路径中包含的空格,就像在原始调用中一样。