【问题标题】:How can I use a variable that contains a space?如何使用包含空格的变量?
【发布时间】:2012-06-01 08:46:26
【问题描述】:

我有以下文件:

~/tmp/testbash$ l
file 1.test  move.sh*

move.sh 在哪里:

#!/bin/bash
#-x

FILENAME='file\ .test'
echo $FILENAME
echo joo
mv $FILENAME test.test

当我运行 ./move.sh 时,我得到这个输出和错误:

file\ .test
joo
mv: target `test.test' is not a directory

问题是它执行命令为:

mv file .test test.test

而不是:

mv file\ .test test.test

我该如何解决这个问题?

【问题讨论】:

  • 请不要将解决方案编辑成问题。将答案分开可以让他们独立投票、评论和编辑。相反,请单击您接受的答案旁边的复选框。
  • (...说到内容:区分数据和语法很重要;foo\ bar 中的反斜杠是语法 [导致以下空格被视为文字],而反斜杠在'foo\ bar' 是数据)。

标签: bash


【解决方案1】:

如果变量包含嵌入的空格,则用双引号 (") 将变量括起来。

FILENAME='file .test'
mv "$FILENAME" test.test

【讨论】:

    【解决方案2】:

    如果变量值中有空格,请使用双引号:

    FILENAME='file\ .test'
    echo "$FILENAME"
    echo joo
    mv "$FILENAME" test.test
    

    【讨论】:

    • 如果名称包含 literal 反斜杠,这将起作用,而不是在意图转义空格的情况下。请参阅 OP 编辑​​到他们的问题中的答案(在历史中,如果在阅读此评论时不再存在),其中没有文字反斜杠。
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2021-12-29
    • 2018-05-07
    相关资源
    最近更新 更多