【问题标题】:How to avoid printing quotation marks in cat <<如何避免在cat <<中打印引号
【发布时间】:2021-06-30 12:14:06
【问题描述】:

我正在尝试使用test.sh 中的此代码生成一个给定模板的文件:

#!/bin/sh

#define parameters which are passed in.
ID=$1
DIRECTORY=$2

#define the template.
cat  <<EOF
./pgap.py -D singularity -r -o $DIRECTORY/$ID $DIRECTORY/$ID'_input.yaml'

我在最后一行使用了',以避免与$ID 变量后面的文本混在一起。但是在运行代码时会同时打印'。 换句话说,当我运行时:

bash test.sh id dir

我明白了

./pgap.py -D singularity -r -o dir/id dir/id'_input.yaml'

,但我想得到:

./pgap.py -D singularity -r -o dir/id dir/id_input.yaml

【问题讨论】:

    标签: bash heredoc


    【解决方案1】:

    替换

    $DIRECTORY/$ID'_input.yaml'
    

    $DIRECTORY/${ID}_input.yaml
    

    【讨论】:

    • '$DIRECTORY/${ID}_input.yaml',因为这里的文档中没有解析/尊重引号。这会将单引号从字面上放入生成的文档中,这可能是您真正想要的(因为它看起来像是一个 shell 脚本)。
    • @GordonDavisson:感谢您指出这一点。我已相应地更正了我的答案。
    【解决方案2】:

    您可以通过将变量名称括在花括号中来实现您想要使用单引号执行的操作,即$DIRECTORY/${ID}_input.yaml

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 1970-01-01
      • 2020-10-05
      • 2021-05-24
      • 1970-01-01
      • 2018-11-07
      • 2022-01-13
      • 2013-12-20
      • 2020-11-30
      相关资源
      最近更新 更多