我正在编写一个 shell 脚本,其中参数将是一个位置的路径。我正在使用 readlink -f 命令来获取用户发送的路径的绝对路径。假设如果用户发送的路径有空格,比如,
/home/stack over flow/location
我不希望用户发送类似这样的引号
"/home/stack over flow/location"
我这里有两个问题,
1) 即使路径是用引号传递的,当我遍历 $@ 时,引号也会被抑制并获得不带引号的路径。
2) 我做了一个工作来检查参数是否包含空格,然后我明确地添加了
if [[ $1 = *\ * ]] ; then
temp=\"$1\"
fi
我在其中明确添加了引号 ",但现在我面临的问题是,即使我添加了带空格的变量,现在 readlink 也不起作用。 当我做的时候
full_path=`readlink -f ${temp}`
它的说法 用法:读取链接 [-n] [-f] 符号链接(symbolic link)
如果我在 shell 中将它作为一个普通的 unix 命令来执行,比如
readlink -f "/home/stack over flow/location"
正在运行,我正在获取完整路径。为什么即使我附加空格 readlink 在 shell 脚本中也不起作用?请帮我解决这个问题。
最佳答案
好吧,您在脚本参数中获得不带引号的路径是有道理的:引号用于处理脚本的调用 的 shell,而不是用于脚本本身。 我假设你这样调用命令:
./test "/home/stack over flow/location"
其中“测试”是您实现的脚本。路径周围的引号确保执行此命令的 shell 将路径视为一个单独的参数,而不是像没有引号那样将其视为三个单独的字符串。但是引号不被视为参数本身的一部分。因此,当参数被移交给您的脚本时,您会得到一个包含整个路径的参数,而不是一个包含基于路径的修改字符串的参数:带有填充引号的字符串。
您可以毫无问题地使用该参数。只需再次在其周围加上引号:
readlink -f "$@"
将保护指定路径中包含的空白,就像在原始调用中一样。
关于linux - readlink -f 带空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664559/