AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 76946370
Accepted
meatballbeam
meatballbeam
Asked: 2023-08-21 22:41:42 +0800 CST2023-08-21 22:41:42 +0800 CST 2023-08-21 22:41:42 +0800 CST

(macOS Bash) 2 strings aparentemente idênticas não são iguais, mostrando apenas diferenças com "set -x"

  • 772

1ª pergunta sobre stackoverflow, diga-me se fiz algo errado.

Quero coletar membros do grupo administrativo e compará-los com os usuários locais (algumas contas excluídas via grep -v). Compará-los meio que não funciona, pois sempre mostra 2 strings idênticas como diferentes.

Sou novo no scipting e confio muito no Google para fazer qualquer coisa. Tentei basicamente tudo que encontrei no stackoverflow via google sem sucesso e revisei as perguntas semelhantes, então, embora este pareça ser um tópico recorrente, não acho que seja uma duplicata.

Então aqui está o script:

#!/bin/bash

localuser=$(ls /Users/ | grep -v "Shared\|admin\|.localized\|_appstore\|root")
localadmin=$(dseditgroup -o read admin | grep $localuser)

if [[ "$localadmin" == "$localuser" ]]; then 
echo "true"
else
echo "false"
fi

Se eu repetir ambas as variáveis ​​usando od -c, obtenho a seguinte saída:

0000000    m   f   r   a   n   k  \n                                    
0000007
0000000    m   f   r   a   n   k  \n                                    
0000007

Usando set -x (deixando de fora o -if/else), obtenho o seguinte:

++ ls /Users/
++ grep -v 'Shared\|admin\|.localized\|_appstore\|root'
+ localuser=mfrank
++ dseditgroup -o read admin
++ grep mfrank
+ localadmin='          mfrank'
+ echo mfrank
mfrank
+ echo mfrank
mfrank

Aqui posso ver claramente que $localadmin tem dois ' e espaços em branco. De onde eles vêm e como posso me livrar deles? Por que eles não estão aparecendo com od -c?

Muito obrigado por ajudar.

EDITAR:

O uso correto do OD mostra o seguinte:

localadmin
0000000    004411  063155  060562  065556 0000010                                
localuser
0000000    063155  060562  065556  0000006                                  
bash
  • 2 2 respostas
  • 42 Views

2 respostas

  • Voted
  1. Best Answer
    Charles Duffy
    2023-08-21T23:00:24+08:002023-08-21T23:00:24+08:00

    Seu problema imediato é porque $localadminestá sujeito a divisão de palavras e expansão global; portanto, quando você executou, echo $localadmin | odo espaço em branco foi removido. Use sempre "$localadmin" entre aspas para evitar que seus dados sejam mungados.

    Quando você deseja remover intencionalmente espaços em branco de uma variável, pode fazer isso com ${localadmin//[[:space:]]/}.


    Para o seu problema real , encontrar o nome de usuários administradores locais não raiz no MacOS:

    dscacheutil -q group -a name admin |
      awk '$1 == "users:" {
        for (i=2; i<=NF; i++) {
          if ($i != "root") {
            print $i
          }
        }
      }'
    

    Obrigado a Ed Morton por ajudar com o awk. :)

    • 2
  2. RARE Kpop Manifesto
    2023-08-22T02:17:34+08:002023-08-22T02:17:34+08:00

    solução detalhada awksem o loop:

     echo '
    name: admin
    password: *
    gid: 80
    users: root user1 root root root user2 user3 root' | 
    

    mawk 'gsub("^[^\n]+|\nroot\5", _, 
               $!(NF *= $1 == "users:")) + gsub(/^\n+|\5+|\n+$/, "")' OFS='\5\n'
    

    user1
    user2
    user3
    
    • 0

relate perguntas

  • Xargs: a substituição do alias falha apesar de expandir o alias

  • Diferença entre $PATH e ${PATH:+:${PATH}} em ambientes Linux

  • awk localize e substitua por regex e variável de ambiente

  • Como preencher nomes de arquivo com zeros de strings alfanuméricas numeradas e delimitadas de comprimento arbitrário no bash?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    destaque o código em HTML usando <font color="#xxx">

    • 2 respostas
  • Marko Smith

    Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}?

    • 1 respostas
  • Marko Smith

    Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)?

    • 2 respostas
  • Marko Smith

    Por que as compreensões de lista criam uma função internamente?

    • 1 respostas
  • Marko Smith

    Estou tentando fazer o jogo pacman usando apenas o módulo Turtle Random e Math

    • 1 respostas
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 respostas
  • Marko Smith

    Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)?

    • 4 respostas
  • Marko Smith

    Por que o construtor de uma variável global não é chamado em uma biblioteca?

    • 1 respostas
  • Marko Smith

    Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto?

    • 1 respostas
  • Marko Smith

    Somente operações bit a bit para std::byte em C++ 17?

    • 1 respostas
  • Martin Hope
    fbrereto Por que a resolução de sobrecarga prefere std::nullptr_t a uma classe ao passar {}? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 Você pode usar uma lista de inicialização com chaves como argumento de modelo (padrão)? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi Por que as compreensões de lista criam uma função internamente? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A formato fmt %H:%M:%S sem decimais 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python std::views::filter do C++20 não filtrando a visualização corretamente 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute Por que 'char -> int' é promoção, mas 'char -> short' é conversão (mas não promoção)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa Por que o construtor de uma variável global não é chamado em uma biblioteca? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis Comportamento inconsistente de std::common_reference_with em tuplas. Qual é correto? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev Por que os compiladores perdem a vetorização aqui? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan Somente operações bit a bit para std::byte em C++ 17? 2023-08-17 17:13:58 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve