Bash - 如何在子 shell 字符串中强制使用文字?
Bash - How to force literal in subshell string?
我想在使用 sudo bash -c
执行 shell 命令时控制变量扩展。
我知道我可以用普通的 shell:
bash$ export FOO=foo
bash$ export BAR=bar
bash$ echo "expand $FOO but not "'$BAR'""
expand foo but not $BAR
如何使用 sudo bash -c
执行上述操作?
bash$ sudo bash -c "echo "expand $FOO but not "'$BAR'"""
expand
bash$ sudo bash -c 'echo "expand $FOO but not "'$BAR'""'
expand but not bar
您可以将其与不想扩展的转义 $
一起使用:
$> bash -c "echo \"expand $FOO but not \"'$BAR'"
expand foo but not $BAR
但是我建议使用 here-doc 来避免转义:
# original echo replaced with printf
$> printf 'expand %s but not %s\n' "$FOO" '$BAR'
expand foo but not $BAR
# prints in here-doc with bash
$> bash<<-'EOF'
printf 'expand %s but not %s\n' "$FOO" '$BAR'
EOF
expand foo but not $BAR
传递参数而不是尝试生成要传递给 bash
的字符串。
$ bash -c 'echo "expand but not "' _ "$FOO" '$BAR'
expand 5 but not $BAR
(_
只是在 -c
指定的脚本中设置 [=13=]
的虚拟值。)
我想在使用 sudo bash -c
执行 shell 命令时控制变量扩展。
我知道我可以用普通的 shell:
bash$ export FOO=foo
bash$ export BAR=bar
bash$ echo "expand $FOO but not "'$BAR'""
expand foo but not $BAR
如何使用 sudo bash -c
执行上述操作?
bash$ sudo bash -c "echo "expand $FOO but not "'$BAR'"""
expand
bash$ sudo bash -c 'echo "expand $FOO but not "'$BAR'""'
expand but not bar
您可以将其与不想扩展的转义 $
一起使用:
$> bash -c "echo \"expand $FOO but not \"'$BAR'"
expand foo but not $BAR
但是我建议使用 here-doc 来避免转义:
# original echo replaced with printf
$> printf 'expand %s but not %s\n' "$FOO" '$BAR'
expand foo but not $BAR
# prints in here-doc with bash
$> bash<<-'EOF'
printf 'expand %s but not %s\n' "$FOO" '$BAR'
EOF
expand foo but not $BAR
传递参数而不是尝试生成要传递给 bash
的字符串。
$ bash -c 'echo "expand but not "' _ "$FOO" '$BAR'
expand 5 but not $BAR
(_
只是在 -c
指定的脚本中设置 [=13=]
的虚拟值。)