Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash变量赋值_Bash_Variables - Fatal编程技术网

Bash变量赋值

Bash变量赋值,bash,variables,Bash,Variables,我有一个在~/.config中编辑配置文件的基本脚本-它可以与cd行一起工作,但这似乎是多余的: dir=$HOME/.config/$1 if [ ! -d "$dir" ]; then : else cd "$dir" && for file in * ; do case "$file" in conf | config | *.cfg | *rc) $EDITOR "$file" ;; *) : ;;

我有一个在~/.config中编辑配置文件的基本脚本-它可以与
cd
行一起工作,但这似乎是多余的:

dir=$HOME/.config/$1
if [ ! -d "$dir" ]; then :
    else 
    cd "$dir" && 
    for file in * ; do
        case "$file" in
        conf | config | *.cfg | *rc)  $EDITOR "$file" ;;
        *)  :  ;;
        esac
    done
    cd - 1>/dev/null;
fi
将其更改为使用变量“$dir”失败。我做错了什么

dir=$HOME/.config/$1
if [ ! -d "$dir" ]; then :
    else 
    for file in "$dir" ; do
        case "$file" in
        conf | config | *.cfg | *rc)  $EDITOR "$file" ;;
        *)  :  ;;
        esac
    done;
fi

您没有对
$dir
中的文件进行全局搜索,只列出了
$dir
本身。尝试
$dir/*

您的第一个版本在目录上执行
*
,生成目录中所有文件的列表。您的第二个版本在列表中只有一个条目——目录本身,而不是它的内容。

您不能只使用“$dir”,因为它只提供一个条目:目录。您需要$dir/*,但其中也包括路径,因此您必须去掉它以仅比较文件名:

...
for file in $dir/*; do
    filename=`basename $file`
    case $filename in
    ...

精确地比我快。:-)谢谢你,这很有效。有什么东西我能读得更透彻一些吗?@Eduard:恐怕我不能给你指出一个很好的资源。我所知道的关于shell脚本的大部分内容,我都是在飞行中学习的。我不得不在谷歌上搜索“basename”命令,因为我记不起来了:)基本上,“for”会遍历“in”之后的所有文件。$dir/*扩展为“$dir”所在目录中所有文件的列表。如果$dir是/foo/bar,并且其中有一个名为“baz”的文件,那么在循环中,$file的值将为/foo/bar/baz。
basename
命令将删除路径并为您提供“baz”。这解释了吗?那很好。谢谢。你到底为什么要写
if[!-d“$dir”];然后:;else cd“$dir”…
而不是简单的
if[-d“$dir”];然后cd“$dir”…
?@glenn谢谢你:无知。纯粹而简单。