gpt4 book ai didi

windows - Bash)是否可以在不转义或单引号的情况下传递带有特殊字符的参数?

转载 作者:行者123 更新时间:2023-12-04 19:29:06 24 4
gpt4 key购买 nike

我正在寻找一种将参数传递给带有反斜杠的 bash 脚本的方法。
我认为通过一次拖放将文件从我的 PC 发送到服务器会很方便。
我正在使用 Windows 终端访问服务器,文件资源管理器可以通过拖放复制文件路径。所以我写了一个如下的脚本。

#!/bin/bash

ID=user
PC_IP=xxx.xxx.xxx.xxx
PC_PORT=xxx

FILEPATH=@1

scp -P $PC_PORT -r $ID@$PC_IP:$FILEPATH .
唯一的问题是从文件资源管理器复制的文件路径包含反斜杠。所以我想将整个文件路径作为字符串参数传递。
我试图找到带有特殊字符的传递参数,但每个人都说使用单引号或转义。我认为每次都输入引号很麻烦。
有没有办法在不引用或转义的情况下传递反斜杠?

最佳答案

(我没有要测试的 Windows 设置,但假设它只是在您拖放文件时填充原始路径,我在这里建议的应该可行。)
在 shell 命令行上输入的所有内容(包括脚本的参数)都需要符合 shell 语法,这为您可能在 Windows 文件路径中找到的反斜杠、空格和一堆其他字符赋予特殊含义。为了作为文字字符传递给脚本,它们必须根据 shell 语法规则被引用或转义。
但是还有另一种方法......您可以在启动脚本后让脚本将其作为输入读取,而不是将文件路径作为参数传递。由于脚本将直接读取它,因此脚本可以控制需要或不需要什么语法。特别是可以使用read -r ,其中 -r表示“原始模式”,它不会与反斜杠混淆。像这样的东西:

#!/bin/bash

id=user
pc_ip=xxx.xxx.xxx.xxx
pc_port=xxx

read -r -p "File: " filepath

scp -P "$pc_port" -r "$id@$pc_ip:$filepath" .
请注意,我还改用了小写变量名(小写和混合大小写的变量名更安全,因为一堆全大写的名称具有特殊含义,可能会引起麻烦)。我还双引号引用了所有变量引用,以避免奇怪的空格解析和其他东西(你应该 almost always do this )。
您还可以使脚本接受命令行参数(必须被引用/转义),或者如果未提供,则将其作为输入:
...
if [[ -n "$1" ]]; then
filepath=$1
else
read -r -p "File: " filepath
fi
...

关于windows - Bash)是否可以在不转义或单引号的情况下传递带有特殊字符的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68370960/

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