вызывать команду внутри, если утверждение не выполняется

https://github.com/hhfeuer/nvhda#install-using-dkms решила мою проблему. Он использует ту же стратегию, что и выше, и Пинг, и я. Скорее всего, setpci -s 01:00.0 0x488.l=0x2000000:0x2000000 не работал с моей аппаратной настройкой.

2
задан 6 March 2018 в 06:11

6 ответов

if [ "$VAR1"| cut -c 7-18 = "GHIJKLMN.csv" ]; then

Что это значит, это выполнить [ "$VAR1" и передать вывод на cut -c 7-18 = "GHIJKLMN.csv" ]. [ потерпит неудачу, потому что для его последнего аргумента требуется ], а cut потерпит неудачу, потому что, вероятно, ни =, ни ] не являются файлами.

Я собираюсь угадать, что вы хотели:

if [ "$(echo "$VAR1" | cut -c 7-18)" = "GHIJKLMN.csv" ]; then

Обратите внимание, как я завершаю команду в "$()". Это заставляет его выполнять и заменять свое место выходом. Цитаты важны, поэтому вывод не разбивается на несколько аргументов для [.

Следуя тому, что я считаю лучшим методом для bash, я бы рекомендовал сделать это вместо:

Это позволяет избежать специальной интерпретации $VAR1 эхом (в зависимости от содержимого, может быть ошибкой для опций) и вызова 2 ненужных исполняемых файлов, [ и echo. Что-то особенное, чтобы отметить здесь, что вам действительно не нужны никакие цитаты, которые я использовал. [[ является специальным синтаксисом bash, и даже если подстановка имела пробелы, bash не разбивал бы на слово. Это также не раскололо бы то, что было дано <<<. GHIJKLMN.csv не имеет пробелов или специальных символов, так что это тоже будет хорошо.

Вы также можете пропустить вызов cut, выполнив следующее:

if [[ "${VAR1:6:12}" = "GHIJKLMN.csv" ]]; then

Теперь все выполненный в bash без выполнения какой-либо другой программы. В этом синтаксисе вместо того, чтобы указывать диапазон символов, который вы хотите, как и на cut, вы предоставляете смещение 0 на первый символ и количество символов, которое вы хотите. Это 7 - 1, потому что индексы cut начинаются с 1 и 12, потому что диапазон 7-18 включен, поэтому 18 - 7 + 1.

Я только что увидел, ваш $VAR1 равен [ F25]. Поскольку вы сократили до конца, вам не нужно указывать счет:

if [[ "${VAR1:6}" = "GHIJKLMN.csv" ]]; then
5
ответ дан 22 May 2018 в 12:44
if [ "$VAR1"| cut -c 7-18 = "GHIJKLMN.csv" ]; then

Что это значит, это выполнить [ "$VAR1" и передать вывод на cut -c 7-18 = "GHIJKLMN.csv" ]. [ потерпит неудачу, потому что для его последнего аргумента требуется ], а cut потерпит неудачу, потому что, вероятно, ни =, ни ] не являются файлами.

Я собираюсь угадать, что вы хотели:

if [ "$(echo "$VAR1" | cut -c 7-18)" = "GHIJKLMN.csv" ]; then

Обратите внимание, как я завершаю команду в "$()". Это заставляет его выполнять и заменять свое место выходом. Цитаты важны, поэтому вывод не разбивается на несколько аргументов для [.

Следуя тому, что я считаю лучшим методом для bash, я бы рекомендовал сделать это вместо:

if [[ "$(cut -c 7-18 <<< "$VAR1")" = "GHIJKLMN.csv" ]]; then

Это позволяет избежать специальной интерпретации $VAR1 эхом (в зависимости от содержимого, может быть ошибкой для опций) и вызова 2 ненужных исполняемых файлов, [ и echo. Что-то особенное, чтобы отметить здесь, что вам действительно не нужны никакие цитаты, которые я использовал. [[ является специальным синтаксисом bash, и даже если подстановка имела пробелы, bash не разбивал бы на слово. Это также не раскололо бы то, что было дано <<<. GHIJKLMN.csv не имеет пробелов или специальных символов, так что это тоже будет хорошо.

Вы также можете пропустить вызов cut, выполнив следующее:

if [[ "${VAR1:6:12}" = "GHIJKLMN.csv" ]]; then

Теперь все выполненный в bash без выполнения какой-либо другой программы. В этом синтаксисе вместо того, чтобы указывать диапазон символов, который вы хотите, как и на cut, вы предоставляете смещение 0 на первый символ и количество символов, которое вы хотите. Это 7 - 1, потому что индексы cut начинаются с 1 и 12, потому что диапазон 7-18 включен, поэтому 18 - 7 + 1.

Я только что увидел, ваш $VAR1 равен "ABCDEFGHIJKLMN.csv". Поскольку вы сократили до конца, вам не нужно указывать счет:

if [[ "${VAR1:6}" = "GHIJKLMN.csv" ]]; then
5
ответ дан 17 July 2018 в 19:27
if [ "$VAR1"| cut -c 7-18 = "GHIJKLMN.csv" ]; then

Что это значит, это выполнить [ "$VAR1" и передать вывод на cut -c 7-18 = "GHIJKLMN.csv" ]. [ потерпит неудачу, потому что для его последнего аргумента требуется ], а cut потерпит неудачу, потому что, вероятно, ни =, ни ] не являются файлами.

Я собираюсь угадать, что вы хотели:

if [ "$(echo "$VAR1" | cut -c 7-18)" = "GHIJKLMN.csv" ]; then

Обратите внимание, как я завершаю команду в "$()". Это заставляет его выполнять и заменять свое место выходом. Цитаты важны, поэтому вывод не разбивается на несколько аргументов для [.

Следуя тому, что я считаю лучшим методом для bash, я бы рекомендовал сделать это вместо:

if [[ "$(cut -c 7-18 <<< "$VAR1")" = "GHIJKLMN.csv" ]]; then

Это позволяет избежать специальной интерпретации $VAR1 эхом (в зависимости от содержимого, может быть ошибкой для опций) и вызова 2 ненужных исполняемых файлов, [ и echo. Что-то особенное, чтобы отметить здесь, что вам действительно не нужны никакие цитаты, которые я использовал. [[ является специальным синтаксисом bash, и даже если подстановка имела пробелы, bash не разбивал бы на слово. Это также не раскололо бы то, что было дано <<<. GHIJKLMN.csv не имеет пробелов или специальных символов, так что это тоже будет хорошо.

Вы также можете пропустить вызов cut, выполнив следующее:

if [[ "${VAR1:6:12}" = "GHIJKLMN.csv" ]]; then

Теперь все выполненный в bash без выполнения какой-либо другой программы. В этом синтаксисе вместо того, чтобы указывать диапазон символов, который вы хотите, как и на cut, вы предоставляете смещение 0 на первый символ и количество символов, которое вы хотите. Это 7 - 1, потому что индексы cut начинаются с 1 и 12, потому что диапазон 7-18 включен, поэтому 18 - 7 + 1.

Я только что увидел, ваш $VAR1 равен "ABCDEFGHIJKLMN.csv". Поскольку вы сократили до конца, вам не нужно указывать счет:

if [[ "${VAR1:6}" = "GHIJKLMN.csv" ]]; then
5
ответ дан 23 July 2018 в 20:12

Это работает:

#!/bin/bash

echo 'Beginning of script'
VAR1='ABCDEFGHIJKLMN.csv'
if [ $(echo "$VAR1" | cut -c 7-18) == "GHIJKLMN.csv" ]; then
    echo 'If condition triggered.'
fi
echo 'End of script'

Это также работает:

#!/bin/bash

echo 'Beginning of script'
VAR1='ABCDEFGHIJKLMN.csv'
VAR2=$(echo "$VAR1" | cut -c 7-18)
if [ "$VAR2" == "GHIJKLMN.csv" ]; then
    echo 'If condition triggered.'
fi
echo 'End of script'
2
ответ дан 22 May 2018 в 12:44

Это работает:

#!/bin/bash echo 'Beginning of script' VAR1='ABCDEFGHIJKLMN.csv' if [ $(echo "$VAR1" | cut -c 7-18) == "GHIJKLMN.csv" ]; then echo 'If condition triggered.' fi echo 'End of script'

Это также работает:

#!/bin/bash echo 'Beginning of script' VAR1='ABCDEFGHIJKLMN.csv' VAR2=$(echo "$VAR1" | cut -c 7-18) if [ "$VAR2" == "GHIJKLMN.csv" ]; then echo 'If condition triggered.' fi echo 'End of script'
2
ответ дан 17 July 2018 в 19:27

Это работает:

#!/bin/bash echo 'Beginning of script' VAR1='ABCDEFGHIJKLMN.csv' if [ $(echo "$VAR1" | cut -c 7-18) == "GHIJKLMN.csv" ]; then echo 'If condition triggered.' fi echo 'End of script'

Это также работает:

#!/bin/bash echo 'Beginning of script' VAR1='ABCDEFGHIJKLMN.csv' VAR2=$(echo "$VAR1" | cut -c 7-18) if [ "$VAR2" == "GHIJKLMN.csv" ]; then echo 'If condition triggered.' fi echo 'End of script'
2
ответ дан 23 July 2018 в 20:12

Другие вопросы по тегам:

Похожие вопросы: