在这个脚本中,我最终将“$1”保存到 /test 文件中。
#!/bin/bash
cat > /test << 'EOF'
$1
EOF
Run Code Online (Sandbox Code Playgroud)
事实是..我需要保持
'EOF'
Run Code Online (Sandbox Code Playgroud)
为“EOF”,因为我的论点($1)包含美元符号。
但我需要保存该参数而不是 1 美元
我只是想获取一个 bash 脚本
来返回文本文件的内容。
#!/bin/bash
cat $1
Run Code Online (Sandbox Code Playgroud)
问题是.. 当文件路径没有提供给这个 bash 脚本时......它甚至如何关闭自己。
因为通过常规命令行......如果没有文件路径被提供给 cat 命令......它不会挂断。
几乎就像在等待什么一样..
如果复制内容
httpd.conf
Run Code Online (Sandbox Code Playgroud)
然后将其粘贴到 cat 命令中.. 比如这个..
#!/bin/bash
cat > /test << EOF
pasted here..
EOF
Run Code Online (Sandbox Code Playgroud)
你遇到这个错误:
-bash: command substitution: line 1: unexpected EOF while looking for matching `''
-bash: command substitution: line 4: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
也许解决方案是逃避美元符号,甚至可能是引号等等。
但考虑到这是一个如此大的文件..可以自动转义美元符号吗?
我唯一的选择是通过另一个程序将它们转义,然后将其提供给 cat 命令吗?
让我们假设这是字符串:
'a',"b"
Run Code Online (Sandbox Code Playgroud)
它包含单引号和双引号。
您将如何将其作为单个字符串传递给 bash 脚本?
这是 bash 脚本:
#!/bin/bash
echo $1
Run Code Online (Sandbox Code Playgroud)
它必须回声
'a',"b"
Run Code Online (Sandbox Code Playgroud)
但我们不能假设字符串这么小。最终我计划发送整个
/etc/httpd/conf/httpd.conf
Run Code Online (Sandbox Code Playgroud)
作为此 bash 脚本的字符串。
所以我不能一次转义引号和单引号。