不了解基本的Bash变量和命令分组

时间:2014-03-09 06:24:19

标签: bash variables

在我去的时候添加评论以询问具体问题:

设置字符串时是单引号还是双引号?

echo "Starting..."

我是否需要使用;终止该行?

TARGET_DIR="~/Downloads"

我无法让$TARGET_DIR扩展,尝试过引号,使用$etc进行扩展, 是否有规范的初学者指南介绍这些类型的问题 他们以正确的方式,而不是它与背部抽搐和多行一起工作的力量?

LAST_DOWNLOADED_FILE=$(ls -t $TARGET_DIR | head -n1)
echo "Your newest file in $TARGET_DIR is: $LAST_DOWNLOADED_FILE"

在Mac上运行时,我得到:

ls: ~/Downloads: No such file or directory
Your newest file in ~/Downloads is:

尝试作为一个班轮:

me@compy $FOO="~/Downloads"; echo $(FOO); ls -t $FOO | head -n1
-bash: FOO: command not found

2 个答案:

答案 0 :(得分:4)

你需要:

TARGET_DIR=~/Downloads

即。将波浪号~/保持在引号之外,否则shell不会展开它,~将按字面处理。

答案 1 :(得分:0)

引号内的

~符号被shell视为文字。您需要将其保留在引号之外,如答案中建议的anubhava或使用eval进行插值。

$ TARGET_DIR="~/tmp"
$ echo $TARGET_DIR
~/tmp
$ eval echo $TARGET_DIR
/home/jaypalsingh/tmp

注意:在考虑将其作为选项之前,请务必阅读eval的所有 pros and cons