我不会用细节来烦你,但我需要将一个命令传递给一个没有空格的文件,每个空格都会将下一个文本视为变量,但事实并非如此。我需要能够使用除空格之外的其他字符创建命令或使用十六进制字符来克服这个问题。不幸的是,我完全无法使用此方法,因为该文件存在于 1000 台设备上,我需要在每台设备上手动更改该文件,如果我能解决它的局限性,那么这对我来说是最好的解决方案。
有人知道这是否可能吗?
编辑 大家好,我想了解更多信息,假设我有一个文件 test.sh,它有一个名为 echo_var 的函数,如果我使用以下命令
test.sh echo_var helloworld
该函数将简单地回应 helloworld
如果我说使用命令
test.sh echo_var hello world
只有 hello 被回显,因为它将“hello world”视为两个字符串,并且只承认第一个字符串,该函数将每个分离的字符串作为变量,并且只使用第一个变量,即 hello。我需要将 hello world 设为一个变量
我想要运行的命令是重新启动服务,即
test.sh echo_var hello&&service apache2 restart
因此,hello和service都会被回显,但是service后面的空格之后,命令会被切断。
这是我必须与之交互的文件(test.sh),同样,这是在数千台设备上,我需要使用它:
case "$1" in
echo_var)
echo "$2"
;;
答案1
使用双引号括住字符串
下面一个应该可以正常工作
test.sh echo_var "hello world"
答案2
#!/bin/sh
echo_var="hello world"
echo $echo_var
您正在寻找这样的东西吗?
#!/bin/sh
echo_var="Apache Server Restarted"
echo $echo_var >> /var/log/ApacheRestart.log
service apache2 restart
因此像这样的事情可能会对你有帮助。
答案3
我的解决方案如下:
./test.sh echo_var test1;what="service restart apache2";$what
这意味着脚本永远不会捕获空格