我刚刚创建了 bash 脚本并想要附加变量脚本,但它不能正常工作,这里是脚本:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
我尝试使用 echo 运行附加此脚本,但结果不一样:
echo "export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'" > wew.txt
如果cat wew.txt
结果是:
export PROMPT_COMMAND='RETRN_VAL=0;logger -p local6.debug widianto [69]: echo "export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'" > wew.txt []'
感谢您的帮助
答案1
您在这里观察到的是,当“强引号”被包裹在“弱引号”中时,它会失去其效力:
$ echo $foo
bar
$ echo '$foo'
$foo
$ echo "echo '$foo'"
echo 'bar'
虽然你可以通过对每个特殊字符使用反斜杠转义来修复代码,但避免被 shell 扩展的更好方法可能是使用 here-document 而不是echo
, 和引号(在任何支持的方式 - 弱、强或反斜杠)结束标记:
$ cat << \EOF
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
EOF
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
答案2
我已经成功创建变量:
widianto@rancher3:~$ cat b.bash
#!/bin/bash
# widianto
a="export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug"
b='"$(whoami) [$$]: $(history 1 | sed'
c='"s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
echo "$a $b $c'" >> /home/widianto/test.txt
谢谢