Bash中使用echo写入test.sh时保留$1与命令格式的方法
解决方法
问题核心是Bash会解析双引号内的变量(比如$1),导致内容被替换为空值。要保留原变量形式和命令,同时修正原脚本的语法错误(原if条件写法不符合Bash规范),可用以下两种可靠方式:
方式一:单引号包裹内容(推荐)
单引号在Bash中会完全保留内部所有字符,不解析变量或特殊符号。执行命令:
echo 'TEST_VALUE=$1 if grep -q "$TEST_VALUE" data; then exit 1 fi exit 0' > test.sh
这里把原脚本的[[cat data | grep $TEST_VALUE]]改成了更高效的grep -q "$TEST_VALUE" data,-q选项让grep仅返回状态码、不输出内容,更适合在if条件中使用。
方式二:双引号配合转义符
如果必须用双引号,需把所有$转义为\$,同时转义内部的双引号:
echo "TEST_VALUE=\$1 if grep -q \"\$TEST_VALUE\" data; then exit 1 fi exit 0" > test.sh
验证结果
执行命令后查看文件内容:
cat test.sh
会得到预期的正确内容:
TEST_VALUE=$1 if grep -q "$TEST_VALUE" data; then exit 1 fi exit 0
内容的提问来源于stack exchange,提问作者Try_hard
相关产品推荐
相关产品推荐

