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

不了解基本Bash变量和命令分组,bash,variables,Bash,Variables,添加评论以在我进行时提出具体问题: 设置字符串时使用单引号还是双引号 echo "Starting..." 我需要用一个;来终止线路吗 我无法让$TARGET_DIR扩展、尝试引用、使用$etc修饰, 是否有一个规范的初学者指南来介绍这些类型的问题 他们以正确的方式,而不是强迫它与背部抽搐和多线 LAST_DOWNLOADED_FILE=$(ls -t $TARGET_DIR | head -n1) echo "Your newest file in $TARGET_DIR is: $LAST

添加评论以在我进行时提出具体问题:

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

echo "Starting..."
我需要用一个;来终止线路吗

我无法让$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
你需要:

TARGET_DIR=~/Downloads
i、 e.将波浪线~/保留在引号外,否则shell不会扩展它,~将被逐字处理。

您需要:

TARGET_DIR=~/Downloads
i、 e.将波浪号~/保留在引号外,否则shell将不会扩展它,~将被逐字处理。

~ shell将在引号内签名视为文字。您需要按照他的回答中的建议,将其保留在引号之外,或者使用eval插入

$ TARGET_DIR="~/tmp"
$ echo $TARGET_DIR
~/tmp
$ eval echo $TARGET_DIR
/home/jaypalsingh/tmp
注意:在将eval作为一个选项考虑之前,请确保您阅读了eval的所有内容

~ shell将引号内的符号视为文字。您需要按照他的回答中的建议,将其保留在引号之外,或者使用eval插入

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

注意:在将eval作为一个选项考虑之前,请确保您阅读了eval的所有内容

此外,man命令还提供有用信息。man命令还提供有用信息+1。请注意,TARGET_DIR=~/Downloads和TARGET_DIR=~/'Downloads'也可以工作。本例不需要,但如果~/后面的内容更复杂,则很有用。不,整个~/部分需要在引号之外。是的,我说错了,你是对的,它应该在~/引号之外。谢谢!处理名称中有空格的变量的正确方法是什么?或者:在$SOME_文件中回显您的最新文件;假设$SOME_FILE是“这是一个测试”@Scott:您可以执行TARGETDIR=~/$SOME_FILE+1。请注意,TARGET_DIR=~/Downloads和TARGET_DIR=~/'Downloads'也可以工作。本例不需要,但如果~/后面的内容更复杂,则很有用。不,整个~/部分需要在引号之外。是的,我说错了,你是对的,它应该在~/引号之外。谢谢!处理名称中有空格的变量的正确方法是什么?或者:在$SOME_文件中回显您的最新文件;假设$SOME_文件是“这是一个测试”@Scott:您可以执行TARGETDIR=~/$SOME_文件