Bash如何包含一个带引号作为变量的命令?

时间:2016-11-05 14:37:46

标签: bash shell variables

在我的bash脚本中,我需要在几个地方运行命令

rsync [stuff] --exclude={"/mnt/*","/proc/*"} [source] [destination]

为了避免输入整个列表,我想将选项--exclude={"/mnt/*","/proc/*"}打包到一个名为EXCLUDES的变量中,以便我可以输入我的脚本:

rsync [stuff] "$EXCLUDES" [source] [destination]

实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

使用数组:

EXCLUDES=(
  --exclude="/mnt/*"
  --exclude="/proc/*"
)
rsync [stuff] "${EXCLUDES[@]}" [source] [destination]

或带有--exclude-from选项的here-doc:

rsync [stuff] --exclude-from - [source] [destination] <<EOF
/mnt/proc/*
/proc/*
EOF

我建议不要在脚本中使用大括号扩展。您的文本编辑器应该可以轻松快速复制重复的字符串,并且生成的脚本将更具可读性。 Brace扩展旨在用于交互式使用。