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