gpt4 book ai didi

linux - readlink -f 带空格

转载 作者:IT王子 更新时间:2023-10-29 01:10:16 28 4
gpt4 key购买 nike

我正在编写一个 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com