加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash:将字符串变量解释为文件名/路径

发布时间:2020-12-15 18:47:26 所属栏目:安全 来源:网络整理
导读:我的bash脚本收到一个文件名(或相对路径)作为一个字符串,但必须从该文件读取.我只能从文件名中读取,如果我在脚本中直接声明它是一个文字(不用引号)…这对于参数是不可能的,因为它们是以隐含的字符串开始的.注意: a="~/test.txt"#Look for itif [[ -a $a ]]
我的bash脚本收到一个文件名(或相对路径)作为一个字符串,但必须从该文件读取.我只能从文件名中读取,如果我在脚本中直接声明它是一个文字(不用引号)…这对于参数是不可能的,因为它们是以隐含的字符串开始的.注意:
a="~/test.txt"
#Look for it
if [[ -a $a ]] ; then
    echo "A Found it"
else
    echo "A Error"
fi
#Try to use it
while read line; do
    echo $line
done < $a

b='~/test.txt'
#Look for it
if [[ -a $b ]] ; then
    echo "B Found it"
else
    echo "B Error"
fi
#Try to use it
while read line; do
    echo $line
done < $b

c=~/test.txt
#Look for it
if [[ -a $c ]] ; then
    echo "C Found it"
else
    echo "C Error"
fi
#Try to use it
while read line; do
    echo $line
done < $c

得到:

A Error
./test.sh: line 10: ~/test.txt: No such file or directory
B Error
./test: line 12: ~/test.txt: No such file or directory
C Found it
Hello

如上所述,我不能将命令行参数传递给上面的例程,因为我得到与引用的字符串相同的行为.

这是?扩展的规则的一部分.在Bash手册中明确指出,当引用?时,不会执行此扩展.

解决方法1

不要引用?.

file=~/path/to/file

如果需要引用文件名的其余部分:

file=~/"path with spaces/to/file"

(这在花园种类的壳中完全合法.)

解决方法2

使用$HOME而不是?.

file="$HOME/path/to/file"

BTW:Shell变量类型

你似乎对shell变量的类型有些困惑.

一切都是一个字符串.

重复,直到它沉入:一切都是一个字符串. (除了整数,但它们主要是字符串AFAIK之上的黑客,而数组,但它们是字符串数组)

这是一个shell字符串:“foo”. “42”也是.所以是的.如果你不需要引用东西,那就不合适了谁想要输入“ls”“-la”“some / dir”?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读