如何比较文件夹和字符串

时间:2016-07-21 00:28:41

标签: bash shell

如何检查$dir是否等于"string"

我正在尝试这个:

array=(/path/to/folders/*)

for dir in "${array[@]}"; do
  if["${dir}" == "/path/to/folders/subfolder"]; then
    do something...
  fi
done

3 个答案:

答案 0 :(得分:3)

在shell中,空格很重要。替换:

if["${dir}" == "/path/to/folders/subfolder"]; then

使用:

if [ "${dir}" = "/path/to/folders/subfolder" ]; then

注意:

  1. 在shell中,[是命令的名称。它不应该与其他字符串连接。

  2. ][所需的最终参数。它也不应该与其他字符串连接。

  3. 虽然bash接受===,但=是与[...]内字符串相等的POSIX兼容运算符。

答案 1 :(得分:1)

看似奇怪,[实际上是命令,也称为test命令。尝试:

type [

你得到:

[ is a shell builtin

这是历史性的。 if语句的语法实际上是if compound_list ,括号实际上不是if语句的一部分,尽管当然这是它们通常的位置使用

shell语法的一般原则是令牌由空格分隔。因此,[命令的参数必须通过空格与其分隔,就像您需要ls -l中的空格一样(ls-l将不起作用)。

此外,[最终(最右侧)参数必须为]。同样,空格必须将其分开以使其成为自己的标记。

所以:

if [ "$dir" == "/path/to/folders/subfolder" ]

在这个例子中,我们将4个参数传递给[命令。

{ }是多余的,但如果您喜欢输入{ },则不会造成任何伤害。

答案 2 :(得分:0)

虽然

<?php
// apt-get install php5 libapache2-mod-php5 php5-curl


// curl 'http://localhost:8983/solr/update/csv?fieldnames=url,keywords,description,title&commit=true' -H 'Content-type:text/plain; charset=utf-8' --data-binary @$file
$fileoutput = 'solr-upload.txt';
date_default_timezone_set("UTC");
$timestamp =  time();
$servertime = date('m/d/Y H:i:s', $timestamp);
$SOLR_SERVER = '127.0.0.1';
$CORE = 'core1';
ob_start();
$callback = &$_REQUEST['fd-callback'];
$url = 'http://'. $SOLR_SERVER .':8983/solr/'. $CORE .'/update/csv?fieldnames=id,keywords,description,title&commit=true';

if (!empty($_FILES['fd-file']) and is_uploaded_file($_FILES['fd-file']['tmp_name'])) {
    $name = $_FILES['fd-file']['name'];
    $data = file_get_contents($_FILES['fd-file']['tmp_name']);
} else {
    $name = urldecode(@$_SERVER['HTTP_X_FILE_NAME']);
    $data = file_get_contents("php://input");
}

$header = array("Content-type:text/csv; charset=utf-8");
$post = $data;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
//curl_setopt($ch, CURLOPT_VERBOSE, TRUE); 
curl_exec($ch);
curl_close($ch);
if ($ch) {
    $outputstring = $name . ' success ' . $servertime . "\n";
    $output = 'Upload Success!';
    file_put_contents($fileoutput, $outputstring , FILE_APPEND | LOCK_EX);
}else {
    $outputstring = $name . ' failed ' . $servertime . "\n";
    $output = 'Upload did not work!';
    file_put_contents($fileoutput, $outputstring , FILE_APPEND | LOCK_EX);
}

// $opt = &$_REQUEST['upload_option'];
// isset($opt) and $output .= "\nReceived upload_option with value $opt";
if ($callback) {
    header('Content-Type: text/html; charset=utf-8');
    $output = addcslashes($output, "\\\"\0..\x1F");
    echo '<!DOCTYPE html><html><head></head><body><script type="text/javascript">',
       "try{window.top.$callback(\"$output\")}catch(e){}</script></body></html>";
} else {
    header('Content-Type: text/plain; charset=utf-8');
    echo $output;
}

?>
[ this ]中的

回答了您的问题,我建议您使用

if [ "${dir}" = "/path/to/folders/subfolder" ]; then

因为if [[ "${dir}" == "/path/to/folders/subfolder" ]]; then 表单支持正则表达式匹配(使用[[..]]运算符)。有关详细信息,请参阅此[ article ]